- PR -

ファイルのアップロードについて

1
投稿者投稿内容
sironeko
会議室デビュー日: 2005/10/09
投稿数: 4
投稿日時: 2005-10-09 20:18
初めて投稿させていただきます。
みなさまよろしくお願いいたします。
初心者なので説明がつたないかも知れませんがよろしくお願いします。

現在JSP+サーブレットにて文書管理的なシステムを作っており、
JSP画面上の各設定値をリクエストから取得してサーブレット側で
DBに格納するようにしています。

ここで問題になったのが、ファイルアップロード時にJSP上で
変更されていた情報をどうやってサーブレットに渡すかなんです。

ファイルのアップロードはinputタグのfileを使って、Submit時に
formのenctypeを「multipart/form-data」にするとおもいますが、
このときに、通常のリクエスト送信で使っていた、
String strAction = req.getParameter("action_type");
などが使えなくなってしまいます。

画面の変更値をすべてこの形式で取得しているのでファイルのアップロード
の時には変更を保持できないので困っています。

何か解決策はあるのでしょうか?

教えてください。
coasm
大ベテラン
会議室デビュー日: 2001/11/26
投稿数: 237
投稿日時: 2005-10-09 22:19
「解決策はあるのか?」ということなら、もちろんあります。

enctypeをmultipartにした場合、fileだけでなく、他のすべてのパラメータも
multipart形式で送られるので、サーバ側でそれを解析してやれば良いのです。

file(の内容)を受け取る処理を御自分で実装されたのなら、この処理は別に
難しくありません。

「普通はどうやって解決しているのか?」という質問なら、
「org.apache.commons.fileuploadを使う」のが一般的でしょう。
sironeko
会議室デビュー日: 2005/10/09
投稿数: 4
投稿日時: 2005-10-10 00:57
引用:

coasmさんの書き込み (2005-10-09 22:19) より:
「解決策はあるのか?」ということなら、もちろんあります。

enctypeをmultipartにした場合、fileだけでなく、他のすべてのパラメータも
multipart形式で送られるので、サーバ側でそれを解析してやれば良いのです。

file(の内容)を受け取る処理を御自分で実装されたのなら、この処理は別に
難しくありません。

「普通はどうやって解決しているのか?」という質問なら、
「org.apache.commons.fileuploadを使う」のが一般的でしょう。



coasmさん、早速の説明ありがとうございます。

fileの内容は、commons.fileuploadを使ってやっているので、実際に
multipart形式のデータから、通常のgetParameterで取得していたデータの
取り方がわかりません。(調べればいいのでしょうが、立て込んでいて時間が・・・)

解説いただけると(もしくは、説明などへのリンクでもかまいません)
大変助かります。

よろしくお願いいたします。
masa
大ベテラン
会議室デビュー日: 2005/05/11
投稿数: 108
投稿日時: 2005-10-10 02:07
こんばんは。

引用:

sironekoさんの書き込み (2005-10-10 00:57) より:
解説いただけると(もしくは、説明などへのリンクでもかまいません)
大変助かります。


ご参考:
http://www.h7.dion.ne.jp/~s_wat/jakarta/fileupload.html
sironeko
会議室デビュー日: 2005/10/09
投稿数: 4
投稿日時: 2005-10-10 02:36
masaさんリンクありがとうございます。

読ませていただきました。。。。が、、

肝心の普通のフォームデータだったら、通常処理。。としか、、
ここで、普通に getParameter("xxx");とかすればいいのでしょうか?
>>>>自分でやってみました(はじめからやりなさい。。。<苦笑)
とれそうですね。普通に。(苦笑)

↓こっちは教えていただきたいです。

それと、もう一つ、ファイルのアップロードを扱うクラスを複数のサーブレットから
呼び出そうとしているのですが、ファイルアップロードの処理が完了したあとに
呼び出しもとに通常のリクエスト(multipartでないsubmit?)で返すことは
できませんか?
このファイルアップロード機能は同じなんですが、それ以外のフォームデータが
それぞれ違い、それを個々のサーブレットで解析してるんですが。。。。
だめ、ですかね?

[ メッセージ編集済み 編集者: sironeko 編集日時 2005-10-10 03:25 ]
masa
大ベテラン
会議室デビュー日: 2005/05/11
投稿数: 108
投稿日時: 2005-10-10 03:24
こんばんは。

引用:

肝心の普通のフォームデータだったら、通常処理。。としか、、
ここで、普通に getParameter("xxx");とかすればいいのでしょうか?



ご参考その2:
http://jakarta.apache.org/commons/fileupload/apidocs/index.html

んーと、
コード:

String strAction = null;
if(item.isFormField()){
if ("action_type".eauals(item.getFieldName()) {
strAction = item.getString());
}
}


みたいな感じで、取得出来ると思います。
試したことはないので、間違っていたらすいません。
引用:

それと、もう一つ、ファイルのアップロードを扱うクラスを複数のサーブレットから
呼び出そうとしているのですが、ファイルアップロードの処理が完了したあとに
呼び出しもとに通常のリクエスト(multipartでないsubmit?)で返すことは
できませんか?
このファイルアップロード機能は同じなんですが、それ以外のフォームデータが
それぞれ違い、それを個々のサーブレットで解析してるんですが。。。。
だめ、ですかね?


これは、今現在知識がないので、私からはなんとも言えません。

FileItemを処理するクラスを作って継承させると楽チンかも。
TemplateMethodパターンがうまく当てはまりそうな気がします。

[ メッセージ編集済み 編集者: masa 編集日時 2005-10-10 03:25 ]
sironeko
会議室デビュー日: 2005/10/09
投稿数: 4
投稿日時: 2005-10-10 03:30
あら。。masaさんの投稿とかぶって書いたみたいですね^^;

上の方<どうやってとるのはわかりました。
丁寧に説明いただいてありがとうございます。

もう一つのリクエストを返す。ですが、
masaさんの一言「FileItemを処理するクラスを作って継承」がぴーんと
きました。
既に作ってるわけですから、それをいちいちコールしないで継承しちゃえばいいんですね。

これで多分解決できそうです。

ながながと付き合っていただき、大感謝でございます(深々礼礼)

。。。。と思って試そうとしましたが、、
うーん。まだ初心者でうまく継承ができませんでした。(苦笑)

何かうまい方法があれば、ご教授お願いいたします。
(今はとりあえず、通常データはハッシュテーブルにセットして返そうかと
考えてます)


[ メッセージ編集済み 編集者: sironeko 編集日時 2005-10-10 03:59 ]
1

スキルアップ/キャリアアップ(JOB@IT)