2016-04-17 9 views
1

背景におけるマルチパート/フォームデータを複数のファイル:

W3cによれば、<input>フィールドで選択された複数のファイルは、別の境界列及び一つだけと「混合/マルチパート」タイプによって送信されるべきです"name"パラメータ(名前がフォーム内で一意でなければならないので長い)。HTTP 1つの<input>

POSTデータ処理を記述すると、メジャーなブラウザは、異なる<input>要素から発信されたものの、同じ名前の複数のファイルを送信することに気付きました。私。代わりに:

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-- 

質問:

私はPOSTデータを処理する方法を

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-- 

...彼らはのようなものを送りますか? 「マルチパート/混合」として複数のファイルを送信するブラウザがあるか、そのようなケースを処理する必要はなく、コードを単純化する必要がありますか?

通知:私はHTTPを処理するためのフレームワークを作成していますので、他のライブラリやフレームワークを使用することはできません。

答えて

6

あなたが見つけたものを確認しました。 は、私はFirefoxとクロムをテストし、そしてこれは私が得るものです:

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-- 

は調査の後、私は the W3c information you provided がすでに RFC7578で廃止されるRFC2388に基づくものであることがわかりました。 (私の重点を置いて)RFC7578 4.3節によると

[RFC2388]は、単一のフォームフィールドの複数のファイルがネストされた「混合/マルチパート」の部分を使用して送信することが示唆されました。 この使用法は推奨されていません。

広く配備された実装に適合させるためには、各ファイルを別々の部分に供給することによって複数のファイルを送信しなければならず、すべて同じ "名前"パラメータを使用しなければなりません。だから、

、あなたの質問:私は、POSTデータを処理する方法を

私の推奨は、W3cの情報を無視し、RFC7578に従います。

「混合/マルチパート」と、複数のファイルを送信するブラウザはありますか必要とされていないと私は私のコードを簡素化する必要があり、このようなケースを扱いますか?

非常に古いブラウザは「混合/マルチパート」が、使用はとにかく推奨されませんので、そのような場合に対処する必要はありませんを使用することができます。

私の推奨事項:コードを間違いなく簡素化する必要があります。

関連する問題