Chciałbym przesłać wiele plików za pomocą żądania pocztowego typu multipart/form-data
i dla każdego pliku potrzebuję znać rozmiar pliku (długość treści) na po stronie serwera.Ustaw nagłówek długości treści na poszczególnych częściach wieloczęściowego/przesyłania danych do formularza
Aby utworzyć żądanie POST
w javascript
, używam obiektu FormData
i dołączam obiekty plików do przesłania do niego. Działa to dobrze, ale tylko nagłówek Content-type
jest dodawany do każdej części oprócz nagłówka Content-Disposition
, ale nie ma nagłówka Content-length
, chociaż ta informacja jest dostępna z poszczególnych obiektów File.
Czy istnieje sposób, aby ustawić nagłówki Content-length
dla każdej części z obiektu FormData
podczas wysyłania zapytania?
Poniżej znajduje się kod, którego używam, w tym moje obejście problemu. To faktycznie używa angular-js
, aby wysłać żądanie, ale myślę, że to nie jest istotne dla pytania.
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(.....
Dodałem nagrodę za to, byłem także dla mnie bólem. – James
Chciałbym zaproponować użycie kątowego do utworzenia zapytania xD –
Czy mógłbyś wyjaśnić, dlaczego tego potrzebujesz? Zwykle kod po stronie serwera oblicza rozmiar każdej "części" w danych wieloczęściowych, szukając ogranicznika granicznego, analizując nagłówki itp. - wszystko, co pozostało, to dane. Czy musisz znać rozmiar każdej części * przed * analizujesz ciało każdej "części" z jakiegoś powodu? – sheltond