- - PR -
サーブレットでのファイルダウンロードについて
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-01-26 15:12
いつもお世話になっています。
今回、バイナリデータを取得し、ブラウザ内に画像・ドキュメントを表示するサーブレットを作成しています。 基本的には下記のコードでできそうなのですが、何点か質問があるので助言頂ければと思います。 Windows2000 SP4 jdk1.4.0.7 IE 6.0.28
1点目はコンテントタイプの指定についてです。 取得するバイナリデータが何のファイルなのかが分からない場合、コンテントタイプには何を指定すれば良いでしょうか? もしくはバイナリファイルを何のファイルか判別する方法はあるでしょうか?(拡張子から判別できない場合) 取得するバイナリファイルは、jpeg・gifといった画像ファイルとword・excel・pdfといったドキュメントファイルになります。 2点目は、ダウンロード画面を表示せず、ブラウザ内にファイルを開きたいのですが、極稀にブラウザ内にではなくアプリケーションが起動します。PowerPointですと100%再現します。 起動したアプリケーションを閉じ、ブラウザを更新するとブラウザ内に表示されます。
宜しくお願いします。 | ||||||||
|
投稿日時: 2007-01-26 16:46
1) バイナリデータを解析すれば可能ですが、 ファイルによって解析するべき場所が異なるので現実的ではありません。 拡張子で管理するか、それが出来ないのであれば対応表を用意したほうが良いでしょう。 2) ダウンロードするサーブレットの呼び出しをいぢると上手くいきます。 具体的には、PDFをダウンロードする場合は http://〜/downloadServlet.pdf PowerPointをダウンロードするときは http://〜/downloadServlet.ppt こうすることで思い通りに動作してくれます。 | ||||||||
|
投稿日時: 2007-01-26 17:34
を使うことは出来ませんか? | ||||||||
|
投稿日時: 2007-01-26 19:20
ひろ@yaさん、ありがとうございます。
上記コードを試してみましたが、nullが返ってきました。 あすかさん、ありがとうございます。 コンテントタイプについてはまだ調査中なのですが、できないようであれば対応表を作ります。
申し訳ございません。 勉強不足で、2)が何を言わんとしているのか理解できませんでした。 拡張子がファイルを表す何かを作成するという事でしょうか? 宜しくお願いします。 | ||||||||
|
投稿日時: 2007-01-26 19:59
恐らく"word"はファイル名ではないですよね?
http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/servlet/ServletContext.html#getMimeType(java.lang.String) >コンテントタイプについてはまだ調査中なのですが、できないようであれば対応表を作ります 通常 web.xml に記載します。 >コンテントタイプについてはまだ調査中なのですが、できないようであれば対応表を作ります。 一覧はこちらにあります。 http://www.iana.org/assignments/media-types/ | ||||||||
|
投稿日時: 2007-01-26 20:07
通常、getMimeType()はファイル名から拡張子を取得して、
拡張子と mime-typeのマッピングテーブルから情報を取得します。 そのため、"word"ではなく、"word.doc"の様なファイル名を引数にする必要があります。 # 標準のマッピング設定に無い拡張子だとやはり null になります。 # その場合は Webアプリケーションの web.xml に mime-mapping を書いて下さい。 | ||||||||
|
投稿日時: 2007-01-30 10:28
インギさん、ひろ@yaさん、ありがとうございます。
他作業のため返信が送れて申し訳ございませんでした。 >恐らく"word"はファイル名ではないですよね? "word"はファイル名になります。 拡張子をなくして処理できるかどうかを確認していました。 >通常、getMimeType()はファイル名から拡張子を取得して、 >拡張子と mime-typeのマッピングテーブルから情報を取得します。 > >そのため、"word"ではなく、"word.doc"の様なファイル名を引数にする必要があります。 やはりファイルの中身を解析し、mime-typeを判別する処理は難しいのでしょうか。。。 インギさんに教えて頂いたURLを参考に、もう少し考えてみます。 他に何か良い手があれば、助言頂けると非常にうれしいです。 返信が遅れ気味になるかもしれませんが、必ずチェックしますので宜しくお願いします。 | ||||||||
|
投稿日時: 2007-01-30 11:08
>やはりファイルの中身を解析し、mime-typeを判別する処理は難しいのでしょうか。。。
Windows でも名前を変えて拡張子を取り除いてしまうとうまく開けないことがありますよね? 技術的にはある程度可能でしょうけれども、Java でそういったことをしてくれる汎用的なライブラリはないかもしれません。「難しい」と思います。 |