Phonegap-Datei Bildübertragung schlägt bei jedem anderen Bild fehl: Fehlercode 3 beim Upload von FileTransfer

8

Ich habe diese Frage selbst beantwortet, da ich lange gebraucht habe, um die Lösung dafür zu finden, und sie wurde nicht sehr gut dokumentiert.

    
Varun Nath 09.10.2013, 14:44
quelle

2 Antworten

22

Beim Versuch, FileTransfer () zu verwenden Lade Bilder von einer phonegap App auf Android auf einen Remote-Server hoch und erhalte einen Fehlercode 3 bei jedem alternativen Dateiupload.

Es funktionierte einmal, aber sofort, als ich es erneut versuchte, würde es einen Fehler werfen, ohne die Datei sogar an den Server zu senden.

Der Code, den ich für den Datei-Upload verwende, war:

Der Schlüssel dafür war, eine Header-Option hinzuzufügen.

%Vor%


Der vollständige Code:

%Vor%     
Varun Nath 09.10.2013, 14:44
quelle
0

Fehlercode 3 ist ein ziemlich breiter Fehler; Es bedeutet im Grunde, dass Ihr Server nicht korrekt codiert ist oder Sie keine Internetverbindung haben, und das führt zu einem Verbindungsfehler.

Könnte bedeuten:

  1. Sie haben kein mehrteiliges Plugin auf dem Server installiert. In PHP setzen Sie "file_uploads = On" (in PHP.ini), in ExpressJS benötigen Sie das Middleware-Plugin von Multer ( Ссылка ) usw.
  2. Das Dateiupload ist größer als das, was Ihr Server zulässt - was zu einem Fehler des Statuscodes 413 führt, mit der Meldung "Request Entity ist zu groß". Um dies in PHP zu beheben, müssen Sie die upload_max_filesize -Einstellung in php.ini anpassen, um dies auf ExpressJS zu beheben, müssen Sie das limit -Feld für Multer usw. anpassen. Grundsätzlich erhöhen Sie die Dateigröße auf dem Server. Die meisten Server beschränken die Dateiuploadgrößen als Sicherheitsmaßnahme. ( Ссылка )
  3. Der options.fileKey -Wert (d. h. <input type="file" name="fileKey" /> ) ist nicht der Name, den Ihr Server erwartet - eine Beispielfehlermeldung könnte ein "unerwartetes Feld" sein.
  4. Das Feld content-type im Header hat keinen Wert von multipart/form-data; boundary=----WebKitFormBoundary . Durch die Protokollierung des Anfrage-Headers auf dem Server kann überprüft werden, ob der Inhaltstyp korrekt eingestellt ist.

Foto-Upload mit Dateiübertragung

@AugieGardner - Auch damit einverstanden, dass das Cordova File Transfer Plugin für das Hochladen von Fotos, die mit dem Camera Plugin aufgenommen wurden, nicht gut dokumentiert ist.

Glücklicherweise habe ich ein funktionierendes Beispiel für iOS (und meine Vermutung ist auch Android):
cordova-Dateitransfer-Plugin funktioniert nicht im ios-Simulator

Foto-Upload ohne Dateiübertragung

Eine einfachere Alternative (oder Fallback) wäre, das Bild als Base64 zu kodieren und es über eine einfache alte AJAX POST-Anfrage zu senden. Was beinhaltet die folgenden Vor- und Nachteile.

Nachteile von Base64-codierten Bildern, die über AJAX gesendet werden

  1. Möglicherweise müssen Sie die Größe des Anforderungslimits auf Ihrem Server erhöhen, damit Sie keine 413-Fehler erhalten (d. h. "Anforderungselement zu groß").
  2. Base64-Bilder sind etwa 37% größer als binäre Bilder, was höchstwahrscheinlich zu langsameren Uploads führt.
  3. Ist möglicherweise nicht für Videos oder andere Dateitypen geeignet.

Vorteile von Base64-codierten Bildern, die über AJAX gesendet werden

  1. Kleinere App-Größe (und schnellerer App-Download), da Cordovas File Transfer Plugin und möglicherweise Cordovas File-Plugin der App keinen Overhead hinzufügen.
  2. Sie müssen nicht Dateiübertragungs-Plug-in -Fehler beheben, wenn Sie Ihre App auf neue Betriebssysteme skalieren (z. B. iOS, Android usw.).
  3. Sie brauchen möglicherweise keinen mehrteiligen Dienst (oder Middleware) auf dem Server, um Bilder hochzuladen.
tfmontague 19.06.2016 07:52
quelle

Tags und Links