Os arquivos são corrompidos quando baixados do servidor FTP

Os arquivos são corrompidos quando baixados do servidor FTP

Atualmente estou enfrentando um problema ao baixar alguns arquivos de um servidor FTP: eles ficam corrompidos. Uma introdução ao problema pode ser vista emesta pergunta SO(quando eu estava pensando que o problema estava no meu software baseado em Qt, mas agora estou convencido de que está no servidor).

A situação é esta: quero copiar 8 arquivos para um servidor FTP e baixá-los posteriormente usando um software baseado em Qt com QNetworkAccessManager. Nas minhas tentativas de fazer isso, descobri quesempre3 dos 8 arquivos são corrompidos (usando o tamanho do arquivo awa de verificação de hash) da mesma maneira (mesmo tamanho de arquivo incorreto). O problema não está no meu software: baixar os arquivos usando o Mozilla e o Chrome resulta noexatomesmos erros. Todo o processo é o seguinte:

  1. 8 arquivos estão em uma pasta Linux Ubuntu. Tamanhos de arquivo OK.
  2. Os 8 arquivos são transferidos para a pasta do Windows 7.
  3. Os arquivos são enviados para o servidor FTP usando FileZilla. Quando terminar, o FileZilla informa aocorretotamanhos para cada um dos 8 arquivos.
  4. Os arquivos são baixados no Linux Ubuntu e no Windows usando navegadores e aplicativos baseados em Qt com QNetworkAccessManager. No Windows, os arquivos também são baixados com o FileZilla.
  5. Os mesmos 3 arquivos são corrompidos - verificados pelos diferentes tamanhos.

Depois de discutir o problema naquela pergunta do SO, foi sugerido que o problema poderia estar no servidor. Fiz algumas pesquisas na web e encontreiesse,esseeesse. As sugestões seriam cálculos de tamanho diferentes pelo FileZilla (difícil, pois uso o cálculo de tamanho do Windows e Linux na maioria das vezes) e o "problema de transferência binária ou ASCII".

Em relação ao segundo, também acho difícil acreditar que seja esse o caso porque embora 2 dos 3 arquivos problemáticos sejam softwares e o outro seja um arquivo binário, há um quarto arquivo que também é binário e que não apresenta nenhum problema. (e outros 3 arquivos são compactados .tar.gz que suponho que também sejam binários e, ainda assim, são baixados corretamente)

Mas vamos supor que seja esse o caso: tenho que especificar um dos dois métodos para fazer o download. Bem, como eu poderia fazer isso tanto ao baixar via navegador quanto ao baixar via QNetworkAccessManager?

E se não for esse o caso: então o que está acontecendo?

Responder1

Bem, parece que conseguimos encontrar o problema - e era, afinal, o problema ASCII ou binário.

Quando o problema apareceu pela primeira vez, estávamos enviando os arquivos para o servidor FTP via FileZilla com modo de transferência “automático”. Ao baixar com o FileZilla, a transferência também foi definida como “automática” e tivemos problemas. O modo de transferência utilizado pelo navegador e pelo QNetworkAccessManager do Qt é desconhecido e ambos estavam retornando com problemas.

Então minha equipe testou o download com FileZilla usando binário; falhar. Em seguida, baixamos usando ASCII - sucesso. Então agora excluímos os arquivos do servidor e carregamos um dos problemáticos com ASCII e baixamos usando FileZilla com ASCII também - sucesso. Em seguida, carregamos usando binário e baixamos usando binário usando FileZilla - sucesso. Mas ao baixar com meu aplicativo baseado em Qt - falha. Então, imaginamos que o QNetworkAcessManager faz download usando ASCII, o que significa que preciso reconfigurá-lo para fazer download como binário ou fazer upload dos arquivos para o servidor FTP usando ASCII. Como esta última opção me causará problemas ao calcular o tamanho do arquivo, optaremos pela primeira solução, se possível. (Também baixamos com sucesso com o navegador que parece fazer isso com binário).

Então é isso: parece que o QNetworkAccessManager faz download usando ASCII e, portanto, qualquer arquivo enviado para um servidor FTP precisa ser feito em ASCII se for para ser baixado posteriormente usando QNetworkAcessManager.

EDIT: Um erro da minha parte. Na verdade, o QNetworkAccessManager faz download usando binário, não ASCII. Isso, é claro, me leva a reavaliar minha interpretação sobre como resolver o problema, mas ainda está claro que o ASCII ou binário é a causa de toda a bagunça.

EDIÇÃO 2: Problema resolvido. Essencialmente, o que se precisa fazer é garantir que os dados serão carregados como binários no servidor FTP; como o QNAM é baixado como binário, os dados devem estar corretos. O engraçado é que isso parece funcionar apenas no Linux. Se eu executar o aplicativo de download baseado em Qt no Windows, o problema persistirá.

EDIT 3: Problema no Windows resolvido: era um problema de configuração, não relacionado a este problema.

informação relacionada