2011-12-29 1 views
0

:ときPOST経由でバイナリ形式のファイルを適切に送信するにはどうすればよいですか?私はアヤックス、ページをリロードせずにファイルに通常の方法をアップロードし、私はクローム要素インスペクタのネットワーク]タブでそれを見たときに、POSTリクエストのペイロードは次のようになります

------WebKitFormBoundaryXseUYiNOVZKdYrTk 
Content-Disposition: form-data; name="fdata[]"; filename="baby_bot.jpg" 
Content-Type: image/jpeg 


------WebKitFormBoundaryXseUYiNOVZKdYrTk 
Content-Disposition: form-data; name="fdata[]"; filename="dyno_bones.png" 
Content-Type: image/png 


------WebKitFormBoundaryXseUYiNOVZKdYrTk-- 

しかし、私FileReaderオブジェクトを使用してファイルの内容をバイナリ形式で読み取り、手作業で作成したPOST要求を介してバイナリデータを送信することによって、POST要求を手動で作成し、ajaxでファイルを送信しようとすると、ペイロードはインスペクタで次のようになります。

------CustomFormBoundaryXseUYiNOVZKdYrTk 
Content-Disposition: form-data; name="fdata[]"; filename="baby_bot.jpg" 
Content-Type: image/jpeg 

a2q#¡B±Áð$RÑá3ñ%br4C&Scs¢ÂâÿÄ 

------CustomFormBoundaryXseUYiNOVZKdYrTk 
Content-Disposition: form-data; name="fdata[]"; filename="dyno_bones.png" 
Content-Type: image/png 

a2q#¡B±Áð$RÑá3ñ%br4C&Scs¢ÂâÿÄ 

------CustomFormBoundaryXseUYiNOVZKdYrTk-- 

バイナリデータ(これらのバイナリデータランダムアクセント付き文字)を使用します。手動で作成されたPOSTリクエストをと完全に一致させるにはどうすればいいですか?これは私のPHPハンドラスクリプトと同じ結果を得るためです。ここでのアイデアは、ブラウザが送信するPOST要求をエミュレートし、PHPバックエンドで何も変更する必要がないことです。

+0

FormDataオブジェクトを使用すると、ファイルをアップロードするのがはるかに簡単になりました。 FileReaderを使用している場合は、POSTリクエストを適切に通過させるためにバイナリデータを処理する必要があります。これは、FormDataオブジェクトを使用するだけの場合と比較して膨大な作業です。方法はこちらをご覧ください:https://developer.mozilla.org/en/DOM/XMLHttpRequest/Using_XMLHttpRequest#Using_FormData_objects – trusktr

答えて

0

POSTリクエストデータをエミュレートするのではなく、FormDataオブジェクトを使用してください。使いやすく、ajax経由でフォームデータを簡単に送信できます。 FormDataオブジェクトは、XMLHttpRequestオブジェクトの助けを借りて自動的に適切なPOSTリクエストを作成して送信します。

Mozillaのマニュアルにはnice article on how to use the XMLHttpRequest objectが含まれており、それ自体にnice example on how to use the FormData objectが含まれています。

関連する問題