Dateien werden beim Herunterladen vom FTP-Server beschädigt

Dateien werden beim Herunterladen vom FTP-Server beschädigt

Ich habe derzeit ein Problem beim Herunterladen einiger Dateien von einem FTP-Server: Sie werden beschädigt. Eine Einführung in das Problem finden Sie unterdiese SO-Frage(früher dachte ich, das Problem liege bei meiner Qt-basierten Software, jetzt bin ich davon überzeugt, dass es am Server liegt).

Die Situation ist folgende: Ich möchte 8 Dateien auf einen FTP-Server kopieren und sie später mit einer Qt-basierten Software mit QNetworkAccessManager herunterladen. Bei meinen Versuchen habe ich festgestellt, dassalle Wege3 der 8 Dateien werden auf die gleiche Weise beschädigt (bei Verwendung beider Hash-Verifizierungen und Dateigröße) (dieselbe fehlerhafte Dateigröße). Das Problem liegt nicht an meiner Software: Das Herunterladen der Dateien mit Mozilla und Chrome führt zugenaudieselben Fehler. Der gesamte Vorgang läuft wie folgt ab:

  1. 8 Dateien befinden sich in einem Linux-Ubuntu-Ordner. Dateigrößen ok.
  2. Die 8 Dateien werden in den Windows 7-Ordner übertragen.
  3. Die Dateien werden mit FileZilla an den FTP-Server gesendet. Sobald dies abgeschlossen ist, teilt FileZilla demrichtigGrößen für jede der 8 Dateien.
  4. Dateien werden sowohl unter Linux als auch unter Ubuntu und unter Windows mithilfe von Browsern und Qt-basierten Apps mit QNetworkAccessManager heruntergeladen. Unter Windows werden Dateien auch mit FileZilla heruntergeladen.
  5. Dieselben 3 Dateien werden beschädigt – erkennbar an den unterschiedlichen Größen.

Nach der Diskussion des Problems in dieser SO-Frage wurde vorgeschlagen, dass das Problem serverseitig sein könnte. Ich habe im Internet recherchiert und fandDas,DasUndDas. Die Vorschläge wären eine andere Größenberechnung durch FileZilla (schwierig, da ich meistens die Größenberechnung unter Windows und Linux verwende) und das „Binär-oder-ASCII-Übertragungsproblem“.

Was das Zweite betrifft, kann ich auch kaum glauben, dass dies der Fall ist, denn obwohl zwei der drei problematischen Dateien Softwaredateien sind und die andere eine Binärdatei ist, gibt es eine vierte Datei, die ebenfalls eine Binärdatei ist und bei der überhaupt kein Problem vorliegt. (und die anderen drei Dateien sind komprimierte .tar.gz-Dateien, bei denen es sich vermutlich auch um Binärdateien handelt, und die dennoch korrekt heruntergeladen werden.)

Aber nehmen wir an, das wäre der Fall: Ich muss eine der beiden Methoden für den Download angeben. Wie könnte ich das sowohl beim Herunterladen über den Browser als auch beim Herunterladen über QNetworkAccessManager tun?

Und wenn dies nicht der Fall ist: Was passiert dann?

Antwort1

Nun, es scheint, wir haben das Problem gefunden – und es war letztlich doch ein ASCII- oder Binärproblem.

Als das Problem zum ersten Mal auftrat, schickten wir die Dateien über FileZilla mit dem Übertragungsmodus „auto“ an den FTP-Server. Beim Herunterladen mit FileZilla war die Übertragung ebenfalls auf „auto“ eingestellt und wir bekamen Probleme. Der vom Browser und von Qts QNetworkAccessManager verwendete Übertragungsmodus ist unbekannt und beide kehrten mit Problemen zurück.

Also hat mein Team das Herunterladen mit FileZilla mit Binärdateien getestet; fehlgeschlagen. Dann haben wir es mit ASCII heruntergeladen – erfolgreich. Also haben wir jetzt die Dateien auf dem Server gelöscht und eine der problematischen Dateien mit ASCII hochgeladen und sie mit FileZilla ebenfalls mit ASCII heruntergeladen – erfolgreich. Dann haben wir sie mit Binärdateien hochgeladen und mit FileZilla mit Binärdateien heruntergeladen – erfolgreich. Aber beim Herunterladen mit meiner Qt-basierten App – fehlgeschlagen. Also haben wir vermutet, dass QNetworkAcessManager mit ASCII herunterlädt, was bedeutet, dass ich es entweder neu konfigurieren muss, um es als Binärdatei herunterzuladen, oder die Dateien mit ASCII auf den FTP-Server hochladen muss. Da ich mit dieser letzteren Option Probleme bei der Berechnung der Dateigröße bekomme, wählen wir wenn möglich die erste Lösung. (Wir haben auch erfolgreich mit dem Browser heruntergeladen, der es anscheinend mit Binärdateien macht.)

Das war's also: Es scheint, dass QNetworkAccessManager Downloads im ASCII-Format durchführt und daher alle auf einen FTP-Server hochgeladenen Dateien im ASCII-Format erfolgen müssen, wenn sie später mit QNetworkAcessManager heruntergeladen werden sollen.

EDIT: Ein Fehler meinerseits. QNetworkAccessManager lädt tatsächlich im Binärformat herunter, nicht im ASCII-Format. Das führt natürlich dazu, dass ich meine Interpretation zur Lösung des Problems überdenken muss, aber es ist immer noch klar, dass das ASCII- oder Binärformat die Ursache für das ganze Durcheinander ist.

EDIT 2: Problem gelöst. Im Wesentlichen muss man sicherstellen, dass die Daten als Binärdateien auf den FTP-Server hochgeladen werden. Da QNAM als Binärdateien herunterlädt, sollten die Daten in Ordnung sein. Das Lustige ist: Dies scheint nur unter Linux zu funktionieren. Wenn ich die Qt-basierte Download-App unter Windows ausführe, besteht das Problem weiterhin.

BEARBEITEN 3: Problem in Windows gelöst: Es war ein Konfigurationsproblem, das nicht mit diesem Problem zusammenhing.

verwandte Informationen