2016-04-17 2 views
1

Der Hintergrund:

Nach W3c, ausgewählt, mehrere Dateien in einem <input> Feld, sollten durch „multipart/mixed“ Typen mit getrennter Grenz Zeichenfolge und nur einem schicken werden Parameter "name" (solange der Name im Formular eindeutig sein sollte).HTTP multipart/form-data mehr Dateien in einem <input>

Schreiben POST Datenverarbeitung, bemerkte ich, dass die wichtigsten Browser so mehrere Dateien senden, als ob sie aus verschiedenen <input> Elemente, aber mit dem gleichen Namen. I.e. Statt:

Content-Type: multipart/form-data; boundary=AaB03x 

--AaB03x 
Content-Disposition: form-data; name="files" 
Content-Type: multipart/mixed; boundary=BbC04y 

--BbC04y 
Content-Disposition: file; filename="file1.txt" 
Content-Type: text/plain 

... contents of file1.txt ... 
--BbC04y 
Content-Disposition: file; filename="file2.gif" 
Content-Type: image/gif 

...contents of file2.gif... 
--BbC04y-- 
--AaB03x-- 

... schicken sie so etwas wie:

Content-Type: multipart/form-data; boundary=AaB03x 

--AaB03x 
Content-Disposition: form-data; name="files"; filename="file1.txt" 
Content-Type: text/plain 

... contents of file1.txt ... 
--BbC04y 
Content-Disposition: form-data; name="files"; filename="file2.gif" 
Content-Type: image/gif 

...contents of file2.gif... 
--AaB03x-- 

Die Frage:

Wie soll ich die POST-Daten verarbeiten? Gibt es Browser, die mehrere Dateien als "multipart/mixed" senden oder die Bearbeitung eines solchen Falls nicht erforderlich ist und ich meinen Code vereinfachen sollte?

Hinweis: Ich schreibe Rahmen für die Behandlung von HTTP, so dass die Verwendung anderer Bibliotheken und Frameworks keine Option ist.

Antwort

6

Ich habe bestätigt, was Sie gefunden haben. Getestet habe ich Firefox und Chromium, und das ist, was ich bekommen:

Content-Type: multipart/form-data; boundary=---------------------------148152952621447 

-----------------------------148152952621447 
Content-Disposition: form-data; name="files"; filename="fileOne.txt" 
Content-Type: text/plain 

this is fileOne.txt 
-----------------------------148152952621447 
Content-Disposition: form-data; name="files"; filename="fileTwo.txt" 
Content-Type: text/plain 

this is fileTwo.txt 
-----------------------------148152952621447-- 

Nach einer Untersuchung fand ich, dass the W3c information you provided auf RFC2388 basiert, die bereits von RFC7578 überflüssig gemacht wird.

Nach RFC7578 Abschnitt 4.3 (mit Hervorhebungen von mir):

[RFC2388] vorgeschlagen, dass mehrere Dateien für ein einzelnes Formularfeld mit einem verschachtelten „multipart/mixed“ Teil übertragen werden. Diese Verwendung ist veraltet.

Um weit verbreitete Implementierungen zu erfüllen, MÜSSEN mehrere Dateien gesendet werden, indem jede Datei in einem separaten Teil bereitgestellt wird, aber alle denselben "name" -Parameter haben.

Also, Ihre Frage:

Wie ich die POST-Daten verarbeiten soll?

Meine Empfehlung ist ignorieren, dass W3c info und RFC7578 folgen.

Gibt es Browser, die mehrere Dateien als "multipart/mixed" senden oder die Handhabung eines solchen Falls nicht erforderlich ist und ich meinen Code vereinfachen sollte?

Sehr alter Browser kann „multipart/mixed“ verwenden, aber die Nutzung ist sowieso veraltet, so dass keine Notwendigkeit solchen Fall zu behandeln.

Meine Empfehlung: Sie sollten Ihren Code definitiv vereinfachen.

Verwandte Themen