FC2ブログ
一陣の神風が舞う
東北弁炸裂するショボプログラマの日々(´・ω・`)
08 | 2019/09 | 10
S M T W T F S
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 - - - - -

ファイルアップロードした時にパラメータを一緒に取りたいよ(その1)

ってコトで再び旧ブログの二番煎じネタですω

ファイルのアップロードを行うために、 「JakartaCommons」の 「Fileupload」 ライブラリを使うのが有名ですが、自分でやろうとすると
HttpServletRequest#getParameter()でファイルと他のパラメータが同時に取れない!!ヽ(`Д´)ノ
なんてコトがあったんじゃないでしょうか?
一体、どんなストリームが流れてくるのか。
そのあたりに興味があったので解析してみました。

今回は、リクエストのストリームデータ構造についてです。



■前提条件を知る

ローカルのファイルをアップロードする前提として、HTMLに記述するFORMタグの属性に

enctype="multipart/form-data"
method="post" (※)
を指定する必要がある。
コレにより、HTTPリクエストがバイナリで送信されるようになる。
<FORM action="./test.jsp" enctype="multipart/form-data" method="post">


■リクエストを単純にダンプしてみる

<FORM action="./test.jsp" enctype="multipart/form-data" method="post">
  <INPUT type="file" name="filename">
  <INPUT type="text" name="param_txt">
  <INPUT value="送信">
</FORM>
こんなHTMLに対して、`index.html`をアップロードファイルに指定し、 テキストボックスに`1234567890987654321234567890987654321234567890`と適当打ちしてみた。
下に書いたのは、そのリクエストの解析結果である。

▼ヘッダ解析結果

キー
Accept-Language ja
Host localhost:8103
Content-Type multipart/form-data; boundary=---------------------------7d73d830604a8
Cookie JSESSIONID=b030397a476a423fdd42
Content-Length 463
User-Agent Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Headline-Reader; .NET CLR 1.1.4322; InfoPath.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)
Accept-Encoding gzip, deflate
Connection Keep-Alive
Cache-Control no-cache
Referer http://localhost:8103/_upload.jsp
Accept */*

▼ストリーム解析結果

-----------------------------7d73d830604a8
Content-Disposition: form-data; name="filename"; filename="C:\Documents and Settings\mahny\デスクトップ\index.html"
Content-Type: text/html

<html>
<body bgcolor="#cccccc">
	<img src="button.png">
</body>
</html>
-----------------------------7d73d830604a8
Content-Disposition: form-data; name="param_txt"

1234567890987654321234567890987654321234567890
-----------------------------7d73d830604a8--

意外と単純な構造でした。
要は、青色の部分で、リクエストをぶった切って、 赤色の部分を、抽出してやればいいわけだ。

■まとめ

リクエストが持つデータは以下の構造をパラメータ数分繰り返し…

"--" + boundary区切り文字列 + (改行コード)
"Content-Disposition:" + (パラメータ) + (改行コード)
"Content-Type:" + (パラメータ) + (改行コード) [ファイルの時のみ存在]
(改行コード)
(データ本体) + (改行コード)

で、最後にコレが来る!!
boundary区切り文字列 + "--"

テーマ:プログラミング - ジャンル:コンピュータ

この記事に対するコメント

この記事に対するコメントの投稿














管理者にだけ表示を許可する


この記事に対するトラックバック
トラックバックURL
→http://ciablo.blog70.fc2.com/tb.php/63-d42775e2
この記事にトラックバックする(FC2ブログユーザー)

プロフィール

Mahny

Author:Mahny
趣味PG派生の職業PG(+SE?)。頭のデキはきっと残念ω

最近の記事

最近のコメント

最近のトラックバック

月別アーカイブ

カテゴリー

ブロとも申請フォーム

この人とブロともになる

ブログ内検索

RSSフィード

リンク

このブログをリンクに追加する

ペット