2013-09-03 9 views
7

io mando dati post tramite XMLHttpRequest:XMLHttpRequest multipart/form-data: limite non valido nel multipart

var xmlHttp=new XMLHttpRequest(); 
xmlHttp.open("POST", domain, true); 
xmlHttp.setRequestHeader("Content-type","multipart/form-data"); 
var formData = new FormData(); 
formData.append("data", data_json_string); 
xmlHttp.send(formData); 

In Python, ottengo un errore se provo a ottenere il POST (o file o nulla) di dati :

MultiPartParserError: Invalid boundary in multipart: None 

Questo non funziona mai ?? Devo davvero creare il corpo del modulo come una singola stringa in cui eseguo il loop dei parametri e posiziono una stringa di limite prima e dopo ciascuno di essi? E se sì, come dovrebbe essere? Come ottengo dal mio POST in Python ?? O c'è un modo più semplice. Mi guardo intorno e non trovo molto su questo.

btw, sto usando "multipart/form-data" perché i miei dati di stringa sono molto lunghi e questo è un modo più veloce per inviarlo. Ha funzionato per me quando ho creato un modulo e lo ho pubblicato, indirizzandolo a un iframe. Ma qui preferisco molto xmlHttp.

risposta

11

Non impostare personalmente l'intestazione Content-Type. Sarà impostato correttamente quando .send() i dati, compreso il limite generato corretto, che manca l'intestazione generata manualmente.

spec indica chiaramente che .send(FormData) utilizzerà la codifica multipart/form-data.

Se i dati sono un formdata

Sia il corpo dell'entità richiesta essere il risultato di esecuzione dell'algoritmo di codifica multipart/form-data con dati come dati del modulo stabiliti e alla UTF-8 come codifica dei caratteri esplicito.

Il tipo mime è la concatenazione di "multipart/form-data;", un carattere U + 0020 SPACE, "boundary =" e la stringa di limite multipart/form-data generata dalla codifica multipart/form-data algoritmo.

+0

Sono preoccupato che sia uri che lo codifica, rendendolo quindi più lungo. Si è trattato di un problema durante l'invio tramite un modulo e l'impostazione dell'intestazione ha fatto una grande differenza. Ma forse questo non succede con xmlHttp? – user984003

+0

Vedi risposta modificata ... – nmaier

+0

Ah. Grazie mille. – user984003

Problemi correlati