- PR -

アップロードダウンロードファイル名の取得

1
投稿者投稿内容
虎猫
常連さん
会議室デビュー日: 2004/05/27
投稿数: 25
投稿日時: 2004-05-27 11:29
初めて投稿させて頂きます。

HttpServletRequest及びHttpServletResponseを使用して、オンライン画面より
アップロード及びダウンロードする「ファイル名」を取得しようとしてますが、
良い方法が分かりません。
getInputStreamやgetOutputStream等を使用すればよいのでしょうか?

宜しくご教授お願いします。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-05-27 12:39
まず、アップロードとダウンロードはまったく異なる処理ですので、区別してください。

ダウンロードするファイル名はサーバ側で認識できるはずですので(でないとダウンロード
なんて不可能でしょう)、特に問題にならないかと思います。アップロードに関しては、
自分で作りこむよりは既存のコンポーネント(例えばJakarta Commonsプロジェクトの
FileUpload)を利用するほうがいいでしょう。
虎猫
常連さん
会議室デビュー日: 2004/05/27
投稿数: 25
投稿日時: 2004-05-27 13:28
引用:

ukさんの書き込み (2004-05-27 12:39) より:
まず、アップロードとダウンロードはまったく異なる処理ですので、区別してください。

ダウンロードするファイル名はサーバ側で認識できるはずですので(でないとダウンロード
なんて不可能でしょう)、特に問題にならないかと思います。アップロードに関しては、
自分で作りこむよりは既存のコンポーネント(例えばJakarta Commonsプロジェクトの
FileUpload)を利用するほうがいいでしょう。



さっそくのご返答有り難うございます。
既に稼働しているJ2EE準拠パターンのWEBシステムより、ブラウザ〜サーバ間
のHTTPリクエスト情報・レスポンス情報を採取する部品を検討しておりまして、
既存の仕組みを修正する事ができません。
ただし、最低限の改修という事で組み込み先のシステムの基底サーブレットから、
「HttpServletRequest」「HttpServletResponse」を横取りして、情報を採取しよう
と考えております。

「参照URL情報」や「パラメータ情報(画面でのセット項目とその値)」は、
うまく採取する事が分かったのですが、クライアントからアップロードするファイル名
やサーバからダウンロードするファイル名等も採取したいと考えております。

「HttpServletRequest」「HttpServletResponse」のメソッド等を確認しても、上記
情報を採取できる方法がなさそうなので悩んでおります。

うまく説明できてないかもしれませんが、宜しくお願いします。






AC
会議室デビュー日: 2004/04/15
投稿数: 18
投稿日時: 2004-05-27 13:50
uploadされるファイルの名称についてはMIMEに関するRFCを読めば HttpServletRequest#getInputStream() で取得したstreamをどういうふうにparseすれば良いかわかると思います。

ぐぐってみたところ↓のサイトに com.oreilly.servlet.MultipartRequest を使用してファイル名を取得するサンプルプログラムがありました。
http://www.techscore.com/tech/Java/Cactus/4.html

但し com.oreilly.servlet.MultipartRequest が商用利用できるかどうかはわかりませんのでご自身でお調べ下さい。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-05-27 14:05
まずダウンロードのほうですが、一般的にはファイル名はレスポンスヘッダのContent-Dispositionに設定されますので、それを調べてみてください。

ファイルアップロードのリクエストは通常マルチパートメッセージとして送られますので、
そのメッセージを解釈する必要があります。
自力でやるならHttpServletRequest#getInputStreamで取得したストリームを読み込んで
ファイル名のパートを取り出せばよいのですが、それをサーブレットフィルタ(ですよね?)で
やってしまうと本来のリクエストの処理に支障をきたすかもしれません。

ACさんが紹介されているオライリーのコンポーネントですが、確か使うならオライリーの
本を買え、とかなんとかあったような…
虎猫
常連さん
会議室デビュー日: 2004/05/27
投稿数: 25
投稿日時: 2004-05-27 15:23
AC様、uk様ありがとうございます。

さっそく「Content-Disposition」ヘッダーと「オライリーのコンポーネント」に関して
調べてみます。
また、質問等をさせて頂くかもしれませんが、宜しくお願いします。
虎猫
常連さん
会議室デビュー日: 2004/05/27
投稿数: 25
投稿日時: 2004-05-28 15:01
追加で相談させてください。

HTTPの「Content-Disposition」ヘッダーでダウンロードファイル名を取得できる
事が分かりました。
ただ、調べていると「非標準ヘッダ」という事でありましたが、J2EE準拠の
システムで「ファイルダウンロード」機能を有するときは、このヘッダーにファ
イル名を入れておくのが一般的なのでしょうか?
それ以外にも、どこかにダウンロードファイル名を埋め込む方法で一般的なもの
がありますでしょうか?

どうぞ宜しくお願いします。
tanabo
常連さん
会議室デビュー日: 2003/04/24
投稿数: 34
投稿日時: 2004-05-28 15:21
J2EE準拠というよりもHTTPプロトコルの話だと思いますので
ブラウザの問題だと思います。

ダウンロード時にファイル名を指定するヘッダは"Content-Disposition"で
問題ないと思います。
当方の開発でもファイルのダウンロードがありましたが、
このヘッダをつけることでIE,Netscapeでは問題なくダウンロードできました。

ファイルのアップロードはukさんがおっしゃられているように、
Commons FileUploadがいいと思います。
1

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