Os arquivos são corrompidos quando baixados do servidor FTP

3

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

A situação é a seguinte: Eu quero copiar 8 arquivos para um servidor FTP e baixá-los mais tarde usando um software baseado em Qt com o QNetworkAccessManager. Em minhas tentativas de fazer isso, descobri que todas as vezes 3 dos 8 arquivos são corrompidos (usando tanto a verificação de hash a.w.a. tamanho do arquivo) da mesma maneira (mesmo tamanho de arquivo incorreto). O problema não está no meu software: fazer o download dos arquivos usando os resultados do Mozilla e do Chrome nos mesmos erros exato . 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 o FileZilla. Uma vez terminado, o FileZilla informa os tamanhos corretos para cada um dos 8 arquivos.
  4. Os arquivos são baixados no Linux Ubuntu a.w.a. no Windows usando os dois navegadores e o aplicativo baseado em Qt com o QNetworkAccessManager. Nos arquivos do Windows 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 nessa questão da SO, foi sugerido que o problema poderia ser do lado do servidor. Eu fiz algumas pesquisas na web e encontrei este , este e isto . As sugestões seriam cálculos de tamanhos diferentes pelo FileZilla (difícil, já que estou usando o cálculo de tamanho do Windows e Linux na maioria das vezes) e o "problema de transferência binário-ou-ASCII".

Em relação ao segundo, eu também acho difícil de acreditar que este é o caso porque embora 2 dos 3 arquivos problemáticos sejam softwares e o outro é um arquivo binário, existe um quarto arquivo que também é um binário e que não mostra nenhum problema qualquer. (e outros 3 arquivos são compactados .tar.gz que eu suponho que também sejam binários e, no entanto, eles são baixados corretamente)

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

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

    
por Momergil 08.06.2015 / 14:12

1 resposta

3

Bem, parece que conseguimos encontrar o problema - e foi, 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 o modo de transferência "auto". Ao fazer o download com o FileZilla, a transferência também foi definida em "auto" e tivemos problemas. O modo de transferência usado pelo navegador e pelo QNetworkAccessManager do Qt é desconhecido e ambos estavam retornando com problemas.

Então minha equipe testou o download com o FileZilla usando binário; falhou. Nós então baixamos usando ASCII - sucesso. Então agora nós apagamos os arquivos no servidor e carregamos uma das problemáticas com o ASCII e baixamos também usando o FileZilla com o ASCII - sucesso. Em seguida, fizemos o upload usando o binário e baixamos usando o binário usando o FileZilla - success. Mas quando baixar com o meu aplicativo baseado em Qt - falhar. Assim, supomos que o QNetworkAcessManager faz o download usando ASCII, o que significa que eu preciso reconfigurá-lo para fazer download como binário ou fazer o upload dos arquivos para o servidor FTP usando ASCII. Como essa opção posterior me causará problemas ao calcular o tamanho do arquivo, nós iremos pela primeira solução, se possível. (Nós também baixamos com sucesso com o navegador que parece fazer isso com binário).

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

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

EDIT 2: Problema resolvido. Essencialmente, o que é preciso fazer é garantir que os dados sejam carregados como binários para o servidor FTP; desde QNAM downloads como binário, os dados devem estar bem. O engraçado é que isso só funciona no Linux. Se eu executar o aplicativo de download baseado em Qt no Windows, o problema persistirá.

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

    
por 08.06.2015 / 15:35