3

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

Ситуация такова: я хочу скопировать 8 файлов на FTP-сервер и загрузить их позже, используя программное обеспечение на основе Qt с QNetworkAccessManager. В моих попытках сделать это, я обнаружил, что всегда 3 из 8 файлов повреждаются (используя обе проверки хеша и размер файла) одинаковым образом (одинаковый размер файла с ошибкой). Проблема не в моем программном обеспечении: загрузка файлов с именами 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 ответ1

3

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

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

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

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

РЕДАКТИРОВАТЬ: ошибка с моей стороны. QNetworkAccessManager фактически загружает с использованием двоичного файла, а не ASCII. Это, конечно, приводит меня к необходимости пересмотреть мою интерпретацию того, как решить проблему, но все еще ясно, что ASCII-или-двоичный код является причиной всего беспорядка.

РЕДАКТИРОВАТЬ 2: Проблема решена. По сути, необходимо убедиться, что данные будут загружены в виде двоичного файла на FTP-сервер; поскольку QNAM загружается как двоичный файл, данные должны быть в порядке. Самое смешное: это швы, чтобы работать только под Linux. Если я запускаю приложение загрузки на основе Qt в Windows, проблема не устраняется.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .