Файлы повреждаются при загрузке с FTP-сервера

Файлы повреждаются при загрузке с FTP-сервера

В настоящее время я столкнулся с проблемой при загрузке некоторых файлов с FTP-сервера: они повреждаются. Введение в проблему можно увидеть вэтот ТАК вопрос(тогда я думал, что проблема в моем программном обеспечении на основе Qt, а теперь я убежден, что проблема на сервере).

Ситуация такова: я хочу скопировать 8 файлов на FTP-сервер и загрузить их позже с помощью программного обеспечения на основе Qt с QNetworkAccessManager. В моих попытках сделать это я обнаружил, чтовсегда3 из 8 файлов повреждаются (используя оба хэша проверки awa размера файла) одинаково (один и тот же ошибочный размер файла). Проблема не в моем программном обеспечении: загрузка файлов с использованием как Mozilla, так и Chrome приводит кточныйте же ошибки. Весь процесс выглядит следующим образом:

  1. 8 файлов в папке Linux Ubuntu. Размеры файлов ОК.
  2. 8 файлов переносятся в папку Windows 7.
  3. Файлы отправляются на FTP-сервер с помощью FileZilla. После завершения FileZilla сообщаетправильныйразмеры для каждого из 8 файлов.
  4. Файлы загружаются как в Linux Ubuntu awa, так и в Windows с помощью обоих браузеров и приложения на основе Qt с помощью QNetworkAccessManager. В Windows файлы также загружаются с помощью FileZilla.
  5. Повреждены одни и те же 3 файла — проверено по разным размерам.

После обсуждения проблемы в этом вопросе SO, было высказано предположение, что проблема может быть на стороне сервера. Я провел небольшое исследование в Интернете и нашелэтот,этотиэтот. Предложениями будут различные вычисления размера с помощью FileZilla (это сложно, так как я большую часть времени использую вычисления размера Windows и Linux) и «проблема передачи двоичных или ASCII-файлов».

Что касается второго, мне также трудно поверить, что это так, потому что, хотя 2 из 3 проблемных файлов являются программными, а один - двоичным файлом, есть четвертый файл, который также является двоичным и не показывает никаких проблем. (а другие 3 файла сжаты в .tar.gz, которые, как я предполагаю, также являются двоичными файлами, и, тем не менее, они загружаются правильно).

Но предположим, что это так: мне нужно указать один из двух методов для загрузки. Ну как я могу сделать это и при загрузке через браузер, и при загрузке через QNetworkAccessManager?

А если это не так: что тогда происходит?

решение1

Что ж, похоже, нам удалось найти проблему — и, в конце концов, это была проблема ASCII-или-бинарности.

Когда проблема впервые возникла, мы отправляли файлы на FTP-сервер через FileZilla с режимом передачи "auto". При загрузке с помощью FileZilla передача также была установлена ​​в "auto", и у нас возникли проблемы. Режим передачи, используемый браузером и QNetworkAccessManager Qt, неизвестен, и оба возвращали проблемы.

Итак, моя команда протестировала загрузку с помощью FileZilla, используя двоичный файл; неудача. Затем мы загрузили, используя ASCII — успешно. Итак, теперь мы удалили файлы на сервере и загрузили один из проблемных файлов с помощью ASCII и загрузили его с помощью FileZilla, также с помощью ASCII — успешно. Затем мы загрузили его с помощью двоичного файла и загрузили с помощью двоичного файла с помощью FileZilla — успешно. Но при загрузке с помощью моего приложения на основе Qt — неудача. Поэтому мы предположили, что QNetworkAcessManager загружает с помощью ASCII, что означает, что мне нужно либо перенастроить его для загрузки в двоичном формате, либо загрузить файлы на FTP-сервер с помощью ASCII. Поскольку этот последний вариант вызовет у меня проблемы при расчете размера файла, мы выбираем первое решение, если это возможно. (Мы также успешно загрузили с помощью браузера, который, похоже, делает это с помощью двоичного файла).

Вот и все: похоже, что QNetworkAccessManager загружает данные с помощью ASCII, и поэтому любой файл, загружаемый на FTP-сервер, должен быть загружен в ASCII, если его предполагается впоследствии загрузить с помощью QNetworkAccessManager.

EDIT: Ошибка с моей стороны. QNetworkAccessManager на самом деле загружает с использованием двоичного кода, а не ASCII. Это, конечно, заставляет меня пересмотреть свою интерпретацию решения проблемы, но по-прежнему ясно, что ASCII-или-бинарный является причиной всей этой неразберихи.

EDIT 2: Проблема решена. По сути, нужно убедиться, что данные будут загружены в двоичном виде на FTP-сервер; поскольку QNAM загружает данные в двоичном виде, с данными все должно быть в порядке. Забавно: похоже, это работает только под Linux. Если я запускаю приложение для загрузки на основе Qt в Windows, проблема остается.

ПРАВКА 3: Проблема в Windows решена: это была проблема конфигурации, не связанная с данной проблемой.

Связанный контент