- PR -

コンテントタイプからバイナリデータの読み込み

投稿者投稿内容
SUNNYDAY
常連さん
会議室デビュー日: 2004/07/14
投稿数: 49
投稿日時: 2006-02-24 10:35
いつもお世話になっております。
apache.commons.HttpClientを使用して、サーブレット通信を行うサンプルPGを
作成しています。
リクエストは、マルチパートです。
問題となっているのは、HttpClientで、
マルチパートメソッドを作る際のFilePartの設定値なのですが、
普通は、
キー:ファイル名 値:バイナリデータ
とすると思うのですが、今回の場合、
キー:固定文字列 値:バイナリデータ
の形になります。
この形式でサーブレットにリクエストを投げた場合、
例えば、ファイルの形式がWORDだったりした場合、
サーブレット側で、コンテントタイプを見てファイルの形式を認識し、
ファイルの読み込みを行うことはできるのでしょうか?
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2006-02-24 13:02
HttpClient側では各パートのContent-Typeを指定できるので、それにどう対応するかは
サーブレット側の責任ですね。Commons FileUploadなどのライブラリを使っているので
あれば、各パートのContent-Typeを取得することはできるはずです。
SUNNYDAY
常連さん
会議室デビュー日: 2004/07/14
投稿数: 49
投稿日時: 2006-02-24 13:32
ukさん、ご返信ありがとうございます。

引用:

ukさんの書き込み (2006-02-24 13:02) より:
HttpClient側では各パートのContent-Typeを指定できるので、それにどう対応するかは
サーブレット側の責任ですね。Commons FileUploadなどのライブラリを使っているので
あれば、各パートのContent-Typeを取得することはできるはずです。




はい。
サーブレット側では、FileUploadを使って、
ファイルデータ(バイナリ)、及びコンテントタイプの取得をしています。
サーブレット側で、取得したデータ(例えばword)の形式をコンテントタイプ
から判定し、その中身を読み込むことは可能なのでしょうか?
例えば、test.wordの中身に”あいうえお”と記述されていた場合、
その値を取得する処理をサーブレット側でしたいのです。
そもそも、なぜこんなことを言い出したかと言うと、
Httpクライアントから、マルチパートでリクエストを送信した場合、
ファイルデータのコンテントタイプを指定しなくても大丈夫か、ということが調べたくて、
何も設定しないと、multipart/form-dataとして扱われて、
リクエストを受信した側は、それでファイルデータの解析ができるのか、
ということを知りたくて、サンプルを作っていたのですが、
サーブレット側で受信した、バイナリファイルをどうやって解析するんだろう・・・
というところで、つまづいてしまったのです・・・。orz

uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2006-02-24 13:52
引用:

SUNNYDAYさんの書き込み (2006-02-24 13:32) より:
サーブレット側で受信した、バイナリファイルをどうやって解析するんだろう・・・
というところで、つまづいてしまったのです・・・。orz


リクエストの形式がマルチパートかどうか、というのは直接関係なく、Wordなどのバイナリ
フォーマットをどのように会席したらいいか、ということが問題であるように思えるのですが、
それで正しいでしょうか。

たとえばWordのファイルであれば、Jakarta POIのようなライブラリを使えば、ある程度の
解析はできるでしょう。そもそもなんのために解析したいのでしょうか?
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2006-02-24 14:02
通常は拡張子とコンテントタイプを信頼するのが筋なんですが、
今回はそれらの情報が取れない場合、どうするかってことですよね?

確実なのは、バイナリを先頭から調べて判断するしかないのですが、
java.net.URLConnection#guessContentTypeFromStream(java.io.InputStream)
というメソッドで「ある程度」判定が可能です。
詳しくは、対象のソースコードを読んでみてください。

他に、サーバがWindowsなら、
極窓という拡張子判定ツールの拡張子判定部分だけを、
DLLとして切り離したものがリリースされています。
コマンドラインで実行できるようにして、
プロセス起動で実行するという方法はいかがでしょうか。
SUNNYDAY
常連さん
会議室デビュー日: 2004/07/14
投稿数: 49
投稿日時: 2006-02-24 14:50
ukさん、かつのりさんご返信ありがとうございました。
すみません、私の質問が曖昧でした。
整理させてください。

>リクエストの形式がマルチパートかどうか、というのは直接関係なく、Wordなどのバイナリ
>フォーマットをどのように会席したらいいか、ということが問題であるように思えるのですが、
>それで正しいでしょうか。

すみません、そうです。


>通常は拡張子とコンテントタイプを信頼するのが筋なんですが、
>今回はそれらの情報が取れない場合、どうするかってことですよね?

そうなんです。
今回は拡張子はわからないので、受け取った側(サーブレット)は、コンテントタイプだけで、
ファイルの内容を読み取れるのか?ということが知りたいのです。
そもそも、名前はわからないけど、
タイプ(word、excel、text等)はわかるようなバイナリデータの
内容を読み込むことは可能でしょうか?
Jakarta POIのサンプルを見てみたのですが、
HSSFWorkbookは、ファイル名がわからないと解析できなそうなので・・・。
SUNNYDAY
常連さん
会議室デビュー日: 2004/07/14
投稿数: 49
投稿日時: 2006-02-24 15:25
自己レスです。

>Jakarta POIのサンプルを見てみたのですが、
>HSSFWorkbookは、ファイル名がわからないと解析できなそうなので・・・。

これは、バイナリデータをByteArrayInputStreamで読み込んで、
POIFSFileSystemの生成時の引数に渡すことで、読み込みには成功しました。
coasm
大ベテラン
会議室デビュー日: 2001/11/26
投稿数: 237
投稿日時: 2006-02-24 19:52
ところで、「今回は拡張子はわからない」のは何故でしょうか?

FilePartを普通に使っていれば、ファイル名をサーバに送るはずですが。

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