Los archivos se dañan cuando se descargan desde el servidor FTP

Los archivos se dañan cuando se descargan desde el servidor FTP

Actualmente tengo un problema al descargar algunos archivos desde un servidor FTP: se corrompen. Una introducción al problema puede verse enesta pregunta SO(Cuando pensaba que el problema estaba en mi software basado en Qt, 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 más tarde usando un software basado en Qt con QNetworkAccessManager. En mis intentos por hacerlo, descubrí quesiempre3 de los 8 archivos se corrompen (usando tanto la verificación de hash como el tamaño de archivo) de la misma manera (mismo tamaño de archivo erróneo). El problema no está en mi software: descargar los archivos usando Mozilla y Chrome da como resultado elexactomismos errores. Todo el proceso es el siguiente:

  1. Hay 8 archivos en una carpeta de Linux Ubuntu. Los tamaños de archivo están bien.
  2. Los 8 archivos se transfieren a la carpeta de Windows 7.
  3. Los archivos se envían al servidor FTP mediante FileZilla. Una vez terminado, FileZilla le dice alcorrectotamaños para cada uno de los 8 archivos.
  4. Los archivos se descargan tanto en Linux Ubuntu como en Windows utilizando ambos navegadores y 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 SO, se sugirió que el problema podría estar en el lado del servidor. Investigué un poco en la web y encontréeste,esteyeste. Las sugerencias serían un cálculo de tamaño diferente por parte de FileZilla (difícil ya que uso el cálculo de tamaño de Windows y Linux la mayor parte del tiempo) y el "problema de transferencia binaria o ASCII".

Respecto al segundo, también me cuesta creer que esto sea así porque aunque 2 de los 3 archivos problemáticos son software y el otro es un archivo binario, hay un cuarto archivo que también es binario y que no presenta problema alguno. (y otros 3 archivos están comprimidos .tar.gz, 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 al descargar a través del navegador como al descargar a través de QNetworkAccessManager?

Y si no es así: ¿qué está pasando entonces?

Respuesta1

Bueno, parece que logramos encontrar el problema y, después de todo, era el problema de ASCII o binario.

Cuando apareció el problema por primera vez, estábamos enviando los archivos al servidor FTP a través de FileZilla con el modo de transferencia "automático". Al descargar con FileZilla, la transferencia también se configuró en "automática" y tuvimos problemas. Se desconoce el modo de transferencia utilizado por el navegador y por QNetworkAccessManager de Qt y ambos regresaban con problemas.

Entonces mi equipo probó la descarga con FileZilla usando binario; fallar. Luego descargamos usando ASCII: éxito. Así que ahora eliminamos los archivos en el servidor y cargamos uno de los problemáticos con ASCII y lo descargamos usando FileZilla con ASCII también: éxito. Luego lo cargamos usando binario y lo descargamos usando binario usando FileZilla: éxito. Pero al descargar con mi aplicación basada en Qt, falla. Entonces supusimos que QNetworkAcessManager se descarga usando ASCII, lo que significa que tengo que reconfigurarlo para descargarlo como binario o cargar los archivos al servidor FTP usando ASCII. Dado que esta última opción me causará problemas al calcular el tamaño del archivo, si es posible, optaremos por la primera solución. (También descargamos exitosamente con el navegador que parece hacerlo con binario).

Eso es todo: parece que QNetworkAccessManager se descarga usando ASCII y, por lo tanto, cualquier archivo cargado en un servidor FTP debe hacerse en ASCII si se supone que se descargará más tarde usando QNetworkAcessManager.

EDITAR: Un error de mi parte. QNetworkAccessManager en realidad descarga usando binario, no ASCII. Esto, por supuesto, me lleva a tener que reevaluar mi interpretación sobre cómo resolver el problema, pero aún así está claro que el ASCII o binario es la causa de todo este desorden.

EDITAR 2: Problema resuelto. Básicamente, lo que hay que hacer es asegurarse de que los datos se carguen como binarios en el servidor FTP; Dado que QNAM se descarga como binario, los datos deberían estar bien. Lo curioso es que esto parece funcionar sólo 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.

información relacionada