ich dieser Frage selbst beantwortet, da es mir eine lange Zeit in Anspruch nahm, die Lösung dafür zu finden und es war nicht sehr gut dokumentiert.Phonegap File Transfer des Bildes nicht auf jedem anderen Bild: Fehlercode 3 mit Filetransfer laden
Phonegap File Transfer des Bildes nicht auf jedem anderen Bild: Fehlercode 3 mit Filetransfer laden
Antwort
Bei dem Versuch, FileTransfer() zu verwenden, um Bilder von einem auf Android zu einem Remote-Server-Code 3 Upload auf jeder zweiten Datei i wurde immer ein Fehler phonegap App hochladen.
Es funktionierte einmal, aber sofort, wenn ich es erneut versuchte, würde es einen Fehler werfen, ohne sogar die Datei an den Server zu senden.
Der Code i für die Datei-Upload bin mit war:
Der Schlüssel zu ihm Arbeit eine Header Option hinzuzufügen war.
options.headers = {
Connection: "close"
}
options.chunkedMode = false;
Der vollständige Code:
var options = new FileUploadOptions();
options.fileKey="file";
options.fileName=imageURI.substr(imageURI.lastIndexOf('/')+1);
options.mimeType="image/jpeg";
options.chunkedMode = false;
*options.headers = {
Connection: "close"
};*
// setup parameters
var params = {};
params.fullpath =imageURI;
params.name = options.fileName;
var ft = new FileTransfer();
ft.upload(imageURI, encodeURI(url+'/account/profile-pics'), win, fail, options);
function win(r) {
//file uploaded successfully
}
function fail(error) {
alert("An error has occurred: Code = " + error.code);
alert("upload error source " + error.source);
alert("upload error target " + error.target);
}
Fehlercode 3 ist ein ziemlich breiter Fehler; Es bedeutet im Grunde, dass Ihr Server nicht korrekt codiert ist oder Sie keine Internetverbindung haben, was zu einem Verbindungsfehler führt.
Könnte bedeuten:
- Sie auf dem Server installiert keine Multipart-Plugin haben. In PHP setzen Sie "file_uploads = On" (in PHP.ini), in ExpressJS benötigen Sie das Middleware-Plugin von Multer (https://www.npmjs.com/package/multer) usw.
- Der Dateiupload ist größer als das, was Ihr Server zulässt - was zu einem Statusfehler führt Code 413, mit einer Nachricht von "Request Entity ist zu groß". Um dies auf PHP zu beheben, müssen Sie die Einstellung
upload_max_filesize
in php.ini anpassen, um dies auf ExpressJS zu beheben, müssen Sie das Feldlimit
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. (https://www.owasp.org/index.php/Unrestricted_File_Upload) - Der
options.fileKey
Wert (d. H.<input type="file" name="fileKey" />
) ist nicht der Name, den Ihr Server erwartet - eine Beispielfehlermeldung könnte "unerwartetes Feld" sein. - Das Feld
content-type
in der Kopfzeile hat keinen Wertmultipart/form-data; boundary=----WebKitFormBoundary
. Durch das Protokollieren des Anforderungsheaders auf dem Server kann überprüft werden, ob der Inhaltstyp korrekt festgelegt wurde.
Foto-Upload mit File Transfer
@AugieGardner - Auch in Übereinstimmung, dass die Cordova File Transfer-Plugin nicht gut für das Hochladen von Fotos mit der Kamera-Plugin genommen dokumentiert.
Zum Glück habe ich ein funktionierendes Beispiel für iOS (und meine Vermutung ist, Android als auch):
cordova file transfer plugin not working in ios simulator
Foto-Upload ohne File Transfer
Eine einfachere Alternative (oder Rückfall), wäre zu kodiere das Bild als Base64 und sende es durch eine einfache alte AJAX POST-Anfrage. Was beinhaltet die folgenden Vor- und Nachteile.
Nachteile von Base64 codierten Bilder über AJAX gesendet
- Sie müssen möglicherweise die Anfrage Limit Größe auf dem Server erhöhen, so dass Sie nicht 413 Fehler (zB „Anforderungsentität zu groß“) erhalten Sie .
- Base64-Bilder sind etwa 37% größer als Binärbilder, was wahrscheinlich zu langsameren Uploads führt.
- Möglicherweise nicht für Videos oder andere Dateitypen geeignet.
Vorteile von Base64 codiert über AJAX
- Kleinere App Größe gesendet Bilder (und schnellere Download-app), weil File Transfer Plugins Cordova und möglicherweise Datei-Plugins Cordova wird nicht fügen Sie Overhead zur App hinzu.
- Sie müssen File Transfer Plugin Fehler nicht beheben, wie Sie Ihre App auf neue Betriebssysteme skalieren (z. B. iOS, Android, etc).
- Sie benötigen möglicherweise keinen Multipart-Service (oder Middleware) auf dem Server, um Bilder hochzuladen.
Dies ist extrem frustrierend, dass dies nicht durch Phonegap dokumentiert wird. Ihre Lösung hat für mich funktioniert, danke. –
Ich bekam diesen Fehler (Fehlercode 3), weil die Dateigröße, die auf dem PHP-Modul auf dem Apache-Server konfiguriert wurde, geringer war als die, die ich als Teil der Anfrage posten wollte. Sobald ich das Limit erhöht hatte, wurde es für mich behoben. –
Fehlercode 3 tritt auch auf, wenn das Internet getrennt wird. –