the request doesn't contain a multiiPad/form-data or multiiPad/form-data stream、content type header
4548 ワード
the request doesn't contain a multiiPad/form-data or multiiPad/form-data stream、content type header
一、HTTPアップロードの基本知識
Form元素の文法では、EncTypeはデータを提出するフォーマットがEncype属性で指定されていることを示しています。データをサーバに返送する際に使用するコードの種類を指定します。フォームデータは名前/値ペアとして符号化されます。これは標準的なコードフォーマットです。multiipad/form-data:フォームデータはメッセージとして符号化され、ページ上の各コントロール対応メッセージの一部です。text/plin:フォームデータはすべてのコントロールまたは書式文字を含まないテキスト形式で符号化されます。補足formのenctype属性は符号化方式としてよく使われています。aplication/x-wn-urlencodedとmultiad/form-dataは標準ではappication/x-wn-urlencodedです。
actionがgetの場合、ブラウザはx-wn-form-urlencodedの符号化方式でformデータを一文字列に変換して、この文字列をurlの後ろに使ってください。この新しいurlをロードします。
actionがpostの場合、ブラウザはformデータをhttp bodyにパッケージし、serverに送信します。
type=fileのコントロールがない場合は、デフォルトのアプリ/x-www-form-urlencodedを使えばいいです。ただし、type=fileがあれば、multiiPad/form-dataを使います。ブラウザはフォーム全体をコントロール単位で分割し、各部分にConteet Displation(form-dataまたはfile)、Conteet-Type(デフォルトはtext/plin)、name(コントロールname)などの情報を加えて分割符(boundary)を付けます。
二、使用中の注意点
AJAXでサーバーにデータをアップロードすると、content-typeがaplication/x-wn-form-urlencodedに設定されていますが、このときは全体の送信内容をエンコードしています。名前に対応する値をエンコードしたわけではありません。したがって、サーバー側では、request.get Parameter(name)という方法で値を取ることが問題になります。
二つの解法があります。
1)サーバー側を変更する:ストリーム方式でハードコード化する
2)クライアントの変更:データ送信構造の変更
サーバーにデータを送る時は、name=escapeの方式でグループを組みます。
このときサーバコードでは、request.get Parameeter(name)で得られた値は符号化しなくてもいいです。
actionがgetの場合、ブラウザはx-wn-form-urlencodedの符号化方式でformデータを一文字列に変換して、この文字列appndをurlの後ろに使ってください。この新しいurlをロードします。 actionがpostの場合、ブラウザはformデータをhttp bodyにパッケージし、serverに送信します。 type=fileのコントロールがない場合は、デフォルトのアプリ/x-www-form-urlencodedを使えばいいです。 ただし、type=fileがあれば、multiiPad/form-dataを使います。ブラウザはフォーム全体をコントロール単位で分割し、各部分にConteet Displation(form-dataまたはfile)、Conteet-Type(デフォルトはtext/plin)、name(コントロールname)などの情報を加えて分割符(boundary)を付けます。 以下のformがあれば、file 1.txtを選択してアップロードします。
次のbodyがあります
転載先:https://www.cnblogs.com/mjorcen/p/3825851.html
一、HTTPアップロードの基本知識
Form元素の文法では、EncTypeはデータを提出するフォーマットがEncype属性で指定されていることを示しています。データをサーバに返送する際に使用するコードの種類を指定します。フォームデータは名前/値ペアとして符号化されます。これは標準的なコードフォーマットです。multiipad/form-data:フォームデータはメッセージとして符号化され、ページ上の各コントロール対応メッセージの一部です。text/plin:フォームデータはすべてのコントロールまたは書式文字を含まないテキスト形式で符号化されます。補足formのenctype属性は符号化方式としてよく使われています。aplication/x-wn-urlencodedとmultiad/form-dataは標準ではappication/x-wn-urlencodedです。
actionがgetの場合、ブラウザはx-wn-form-urlencodedの符号化方式でformデータを一文字列に変換して、この文字列をurlの後ろに使ってください。この新しいurlをロードします。
actionがpostの場合、ブラウザはformデータをhttp bodyにパッケージし、serverに送信します。
type=fileのコントロールがない場合は、デフォルトのアプリ/x-www-form-urlencodedを使えばいいです。ただし、type=fileがあれば、multiiPad/form-dataを使います。ブラウザはフォーム全体をコントロール単位で分割し、各部分にConteet Displation(form-dataまたはfile)、Conteet-Type(デフォルトはtext/plin)、name(コントロールname)などの情報を加えて分割符(boundary)を付けます。
二、使用中の注意点
AJAXでサーバーにデータをアップロードすると、content-typeがaplication/x-wn-form-urlencodedに設定されていますが、このときは全体の送信内容をエンコードしています。名前に対応する値をエンコードしたわけではありません。したがって、サーバー側では、request.get Parameter(name)という方法で値を取ることが問題になります。
二つの解法があります。
1)サーバー側を変更する:ストリーム方式でハードコード化する
InputStream stream = request.getInputStream();
InputStreamReader isr = new InputStreamReader(stream);
BufferedReader br = new BufferedReader(isr);
String str = br.readLine();
System.out.println(str);
str = URLDecoder.decode(str, "gb2312");
System.out.println(str);
br.close();
2)クライアントの変更:データ送信構造の変更
サーバーにデータを送る時は、name=escapeの方式でグループを組みます。
このときサーバコードでは、request.get Parameeter(name)で得られた値は符号化しなくてもいいです。
actionがgetの場合、ブラウザはx-wn-form-urlencodedの符号化方式でformデータを一文字列に変換して、この文字列appndをurlの後ろに使ってください。この新しいurlをロードします。 actionがpostの場合、ブラウザはformデータをhttp bodyにパッケージし、serverに送信します。 type=fileのコントロールがない場合は、デフォルトのアプリ/x-www-form-urlencodedを使えばいいです。 ただし、type=fileがあれば、multiiPad/form-dataを使います。ブラウザはフォーム全体をコントロール単位で分割し、各部分にConteet Displation(form-dataまたはfile)、Conteet-Type(デフォルトはtext/plin)、name(コントロールname)などの情報を加えて分割符(boundary)を付けます。 以下のformがあれば、file 1.txtを選択してアップロードします。
<form action="http://server.com/cgi/handle"
enctype="multipart/form-data"
method="post">
<input type="text" name="submit-name" value="chmod777"><br />
What files are you sending? <input type="file" name="files"><br />
form>
次のbodyがあります
Content-Type: multipart/form-data; boundary=AaB03x
--AaB03x
Content-Disposition: form-data; name="submit-name"
chmod777
--AaB03x
Content-Disposition: form-data; name="files"; filename="file1.txt"
Content-Type: text/plain
... contents of file1.txt ...
--AaB03x--
転載先:https://www.cnblogs.com/mjorcen/p/3825851.html