2 votos

Los archivos se corrompen cuando se descargan del servidor FTP

Actualmente me encuentro con un problema al descargar algunos archivos de un servidor FTP: se corrompen. Una introducción al problema puede verse en esta pregunta del SO (cuando pensaba que el problema estaba en mi software basado en Qt, mientras que ahora estoy convencido de que está en el servidor).

La situación es la siguiente: Quiero copiar 8 archivos a un servidor FTP y descargarlos después usando un software basado en Qt con QNetworkAccessManager. En mis intentos de hacerlo, he descubierto que siempre 3 de los 8 archivos se corrompen (utilizando tanto la verificación del hash como el tamaño del archivo) de la misma manera (el mismo tamaño de archivo erróneo). El problema no es con mi software: la descarga de los archivos usando tanto Mozilla como Chrome da como resultado el exacto los mismos errores. El proceso completo es el siguiente:

  1. 8 archivos están en una carpeta de Linux Ubuntu. El tamaño de los archivos es correcto.
  2. Los 8 archivos se transfieren a la carpeta de Windows 7.
  3. Los archivos se envían al servidor FTP utilizando FileZilla. Una vez terminado, FileZilla le dice al correcto tamaños para cada uno de los 8 archivos.
  4. Los archivos se descargan tanto en Linux Ubuntu como en Windows utilizando tanto los navegadores como la aplicación basada en Qt con QNetworkAccessManager. En Windows los archivos también se descargan con FileZilla.
  5. Los mismos 3 archivos se corrompen - verificado por los diferentes tamaños.

Después de discutir el problema en esa pregunta del SO, se sugirió que el problema podría ser del lado del servidor. Investigué un poco en la web y encontré este , este y este . Las sugerencias serían un cálculo de tamaño diferente por parte de FileZilla (difícil ya que estoy utilizando el cálculo de tamaño de Windows y Linux la mayor parte del tiempo) y el "problema de transferencia binaria o ASCII".

En cuanto a lo segundo, también me cuesta creer que sea así porque aunque 2 de los 3 archivos problemáticos son softwares y el otro es un archivo binario, hay un cuarto archivo que también es un binario y que no muestra problema alguno. (y los otros 3 archivos son .tar.gz comprimidos que supongo que también son binarios y, sin embargo, se descargan correctamente)

Pero supongamos que ese fuera el caso: Tengo que especificar uno de los dos métodos para la descarga. Bueno, ¿cómo podría hacer esto tanto cuando se descarga a través del navegador, así como cuando se descarga a través de QNetworkAccessManager?

Y si no es así: ¿qué ocurre entonces?

3voto

Momergil Puntos 196

Bueno, parece que hemos conseguido encontrar el problema - y era, después de todo, la cuestión de ASCII o binario.

Cuando el problema apareció por primera vez, estábamos enviando los archivos al servidor FTP a través de FileZilla con el modo de transferencia "auto". Al descargar con FileZilla, la transferencia también estaba configurada en "auto" y tuvimos problemas. El modo de transferencia utilizado por el navegador y por el QNetworkAccessManager de Qt es desconocido y ambos devolvían con problemas.

Así que mi equipo probó la descarga con FileZilla usando binario; fallo. Luego descargamos usando ASCII - éxito. Así que ahora borramos los archivos en el servidor y subimos uno de los problemáticos con ASCII y lo descargamos usando FileZilla con ASCII también - éxito. Luego lo subimos usando binario y lo descargamos usando binario usando FileZilla - éxito. Pero al descargar con mi aplicación basada en Qt - fallo. Así que adivinamos que QNetworkAcessManager descarga usando ASCII, lo que significa que o bien tengo que reconfigurarlo para descargar como binario o subir los archivos al servidor FTP usando ASCII. Como esta última opción me dará problemas a la hora de calcular el tamaño del archivo, vamos a optar por la primera solución si es posible. (También hemos descargado con éxito con el navegador que parece hacerlo con binario).

Así que eso es todo: parece que QNetworkAccessManager descarga usando ASCII y, por lo tanto, cualquier archivo subido a un servidor FTP tiene que ser hecho en ASCII si se supone que va a ser descargado después usando QNetworkAcessManager.

EDIT: Un error por mi parte. QNetworkAccessManager realmente descarga usando binario, no ASCII. Esto, por supuesto, me lleva a tener que reevaluar mi interpretación sobre cómo resolver el problema, pero todavía está claro que el ASCII-o-binario es la causa de todo el lío.

EDIT 2: Problema resuelto. Esencialmente lo que hay que hacer es asegurarse de que los datos se subirán como binarios al servidor FTP; como QNAM descarga como binarios, los datos deberían estar bien. Lo curioso es que parece que esto sólo funciona en Linux. Si ejecuto la aplicación de descarga basada en Qt en Windows, el problema persiste.

EDITAR 3: Problema en Windows resuelto: era un problema de configuración, no relacionado con este problema.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X