FormData オブジェクトを使用してファイルを要求に追加するときに、XMLHttpRequest オブジェクトに独自の境界を設定する方法を見つけようとしています。これに関する複数の投稿を見たことがありますが、誰もが「境界を設定しないでください。自動的に生成されます」と言います。これは私が望むものではありません。この種の応答が得られないように、必要なことを説明させてください。
2 つの画像といくつかの json データを含む multipart/form-data リクエストを送信する Web サービス エンドポイントがあります。WCF にはマルチパート リクエストを解析する方法がないため、オープン ソース コードを使用して独自のパーサーを作成しました。それが機能する方法は、リクエストの各セクションを分離するために使用される境界を定義し、そこからすべてがうまく機能することです。そのため、解析クラスが入力ストリームで何かを見つけられるようにするには、境界をサーバー コードが期待するものに正確に設定できる必要があります。
私は Fiddler を使用してこれを実行したことがあり、同僚は私のメソッドを呼び出すビルド中のアプリでこれを実行できるため、これを実行できることはわかっていますが、Postman という Chrome ブラウザー アプリを使用して動作させようとしています。 FormData オブジェクトを使用してマルチパート リクエストを送信します。リクエストが通常次のような独自の境界を生成するという事実以外は機能しています。
----WebKitFormBoundaryQUWQnB6c7TzNzdcz
最後に追加された文字列はランダムに生成されるため、同じになることはありません。サーバーはどの境界を探すべきかを知る方法がないため、このツールを使用してエンドポイントをテストすることはできません。
境界を含む Content-Type ヘッダーを設定しようとしましたが、要求にヘッダーが追加されていることが要求に示されていますが、本文はまだランダムな境界を使用しています。
問題は、FormData オブジェクトや XMLHttpRequest オブジェクトに、生成されているランダムな境界の代わりに自分の境界を使用するように指示するにはどうすればよいかということです。
これがやりたいことが珍しいことだとは想像できません。つまり、これまでの multipart/form-data を使用するサービスを呼び出すすべての経験から、API で境界を設定するものを教えてくれましたが、誰も「ただドンドン」とは言いませんでした。設定しないと、生成されたランダムなジャンクを使用します...」
また、ビジュアルとして、ヘッダーに表示されているのは次のとおりです。
Request Headers
POST /DHICachet.svc/json/DepositCheck HTTP/1.1
Host: dhiibews.securexfr.com
Connection: keep-alive
Content-Length: 514696
Origin: chrome-extension://fdmmgilgnpjigdojojpjoooidkmcomcm
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11
Content-Type: multipart/form-data; boundary=myboundary
Cache-Control: no-cache
Accept: */*
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: ASP.NET_SessionId=zdepe2nhkz0vbhxiulzc2qq1
Request Payload
------WebKitFormBoundaryQUWQnB6c7TzNzdcz
Content-Disposition: form-data; name="item"; filename="Screen shot 2012-09-03 at 4.00.10 AM.png"
Content-Type: image/png
------WebKitFormBoundaryQUWQnB6c7TzNzdcz--
私の境界がmyboundary
リクエストヘッダーに設定されていても、本文は舞台裏で生成された境界をそのまま配置することに注意してください。