Ich möchte mehrere Dateien mit einer Post-Anfrage vom Typ multipart/form-data
hochladen und für jede Datei muss ich die Dateigröße (Content-Length) kennen die Serverseite.Content-Length-Header auf einzelne Teile eines Multipart/Form-Daten-Uploads setzen
Um die POST
Anfrage in javascript
zu erstellen, verwende ich ein FormData
Objekt und fügen Sie die Dateiobjekte für den Upload an. Dies funktioniert gut, aber nur ein Content-type
Header zu jedem Teil hinzugefügt wird, zusätzlich zu der Content-Disposition
Header, aber keine Content-length
Header, obwohl diese Informationen von den einzelnen Dateiobjekte verfügbar ist.
Gibt es eine Möglichkeit zu erreichen, dass Content-length
Header für jedes Teil aus dem FormData
Objekt beim Senden der Anfrage festgelegt werden?
Unten ist der Code, den ich verwende, einschließlich meiner Arbeit um das Problem. Es verwendet tatsächlich angular-js
, um die Anfrage zu senden, aber ich denke, dass dies für die Frage nicht relevant ist.
var form = new window.FormData();
form.append('additional-field-1', new Blob(['some plain text'], {type : 'text/plain'}));
for (var file in fileList) {
var fileObj = fileList[file];
var count = 1 + parseInt(file, null);
form.append('file-size-' + count, new Blob([fileObj.size], {type : 'text/plain'}));
form.append('file-' + count, fileObj);
}
$http.post(url, form, {
transformRequest: angular.identity,
headers: {'Content-Type': undefined}
}).success(.....
Hinzugefügt ein Kopfgeld, das war ein Schmerz für mich auch. – James
Ich wurde vorschlagen, eckig zu verwenden, um die Anfrage xD –
zu erstellen Könnten Sie erklären, warum Sie das brauchen? Normalerweise berechnet der serverseitige Code die Größe jedes "Teils" in den mehrteiligen Daten, indem er nach dem Begrenzungsbegrenzer sucht, die Header analysiert usw. - was immer noch übrig ist, sind die Daten. Müssen Sie die Größe jedes Teils * wissen, bevor Sie den Körper jedes "Teils" aus irgendeinem Grund analysieren? – sheltond