Vorrei caricare più file utilizzando una richiesta di posta di tipo multipart/form-data
e per ogni file ho bisogno di conoscere la dimensione del file (lunghezza del contenuto) su il lato server.Imposta intestazione lunghezza contenuto su singole parti di un caricamento multipart/form-data
Per creare la richiesta POST
in javascript
Uso un oggetto FormData
e aggiungo gli oggetti File per il caricamento su di esso. Funziona bene, ma solo un'intestazione Content-type
viene aggiunta a ciascuna parte, oltre all'intestazione Content-Disposition
, ma non all'intestazione Content-length
, sebbene queste informazioni siano disponibili dai singoli oggetti File.
C'è un modo per ottenere che le intestazioni Content-length
siano impostate per ogni parte dall'oggetto FormData
quando si invia la richiesta?
Di seguito è riportato il codice che uso, compreso il mio work-around per il problema. In realtà utilizza angular-js
per inviare la richiesta, ma penso che questo non è rilevante per la domanda.
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(.....
Aggiunto un dono a questo, è stato un dolore anche per me. – James
Stavo per proporre l'uso angolare per formare la richiesta xD –
Puoi spiegare perché hai bisogno di questo? Normalmente, il codice lato server elabora le dimensioni di ciascuna "parte" nei dati multipart cercando il delimitatore di confine, analizzando le intestazioni, ecc. - tutto ciò che resta sono i dati. È necessario conoscere la dimensione di ciascuna parte * prima * si analizza il corpo di ciascuna "parte" per qualche motivo? – sheltond