- - PR -
コンテントタイプからバイナリデータの読み込み
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-02-24 10:35
いつもお世話になっております。
apache.commons.HttpClientを使用して、サーブレット通信を行うサンプルPGを 作成しています。 リクエストは、マルチパートです。 問題となっているのは、HttpClientで、 マルチパートメソッドを作る際のFilePartの設定値なのですが、 普通は、 キー:ファイル名 値:バイナリデータ とすると思うのですが、今回の場合、 キー:固定文字列 値:バイナリデータ の形になります。 この形式でサーブレットにリクエストを投げた場合、 例えば、ファイルの形式がWORDだったりした場合、 サーブレット側で、コンテントタイプを見てファイルの形式を認識し、 ファイルの読み込みを行うことはできるのでしょうか? | ||||
|
投稿日時: 2006-02-24 13:02
HttpClient側では各パートのContent-Typeを指定できるので、それにどう対応するかは
サーブレット側の責任ですね。Commons FileUploadなどのライブラリを使っているので あれば、各パートのContent-Typeを取得することはできるはずです。 | ||||
|
投稿日時: 2006-02-24 13:32
ukさん、ご返信ありがとうございます。
はい。 サーブレット側では、FileUploadを使って、 ファイルデータ(バイナリ)、及びコンテントタイプの取得をしています。 サーブレット側で、取得したデータ(例えばword)の形式をコンテントタイプ から判定し、その中身を読み込むことは可能なのでしょうか? 例えば、test.wordの中身に”あいうえお”と記述されていた場合、 その値を取得する処理をサーブレット側でしたいのです。 そもそも、なぜこんなことを言い出したかと言うと、 Httpクライアントから、マルチパートでリクエストを送信した場合、 ファイルデータのコンテントタイプを指定しなくても大丈夫か、ということが調べたくて、 何も設定しないと、multipart/form-dataとして扱われて、 リクエストを受信した側は、それでファイルデータの解析ができるのか、 ということを知りたくて、サンプルを作っていたのですが、 サーブレット側で受信した、バイナリファイルをどうやって解析するんだろう・・・ というところで、つまづいてしまったのです・・・。orz | ||||
|
投稿日時: 2006-02-24 13:52
リクエストの形式がマルチパートかどうか、というのは直接関係なく、Wordなどのバイナリ フォーマットをどのように会席したらいいか、ということが問題であるように思えるのですが、 それで正しいでしょうか。 たとえばWordのファイルであれば、Jakarta POIのようなライブラリを使えば、ある程度の 解析はできるでしょう。そもそもなんのために解析したいのでしょうか? | ||||
|
投稿日時: 2006-02-24 14:02
通常は拡張子とコンテントタイプを信頼するのが筋なんですが、
今回はそれらの情報が取れない場合、どうするかってことですよね? 確実なのは、バイナリを先頭から調べて判断するしかないのですが、 java.net.URLConnection#guessContentTypeFromStream(java.io.InputStream) というメソッドで「ある程度」判定が可能です。 詳しくは、対象のソースコードを読んでみてください。 他に、サーバがWindowsなら、 極窓という拡張子判定ツールの拡張子判定部分だけを、 DLLとして切り離したものがリリースされています。 コマンドラインで実行できるようにして、 プロセス起動で実行するという方法はいかがでしょうか。 | ||||
|
投稿日時: 2006-02-24 14:50
ukさん、かつのりさんご返信ありがとうございました。
すみません、私の質問が曖昧でした。 整理させてください。 >リクエストの形式がマルチパートかどうか、というのは直接関係なく、Wordなどのバイナリ >フォーマットをどのように会席したらいいか、ということが問題であるように思えるのですが、 >それで正しいでしょうか。 すみません、そうです。 >通常は拡張子とコンテントタイプを信頼するのが筋なんですが、 >今回はそれらの情報が取れない場合、どうするかってことですよね? そうなんです。 今回は拡張子はわからないので、受け取った側(サーブレット)は、コンテントタイプだけで、 ファイルの内容を読み取れるのか?ということが知りたいのです。 そもそも、名前はわからないけど、 タイプ(word、excel、text等)はわかるようなバイナリデータの 内容を読み込むことは可能でしょうか? Jakarta POIのサンプルを見てみたのですが、 HSSFWorkbookは、ファイル名がわからないと解析できなそうなので・・・。 | ||||
|
投稿日時: 2006-02-24 15:25
自己レスです。
>Jakarta POIのサンプルを見てみたのですが、 >HSSFWorkbookは、ファイル名がわからないと解析できなそうなので・・・。 これは、バイナリデータをByteArrayInputStreamで読み込んで、 POIFSFileSystemの生成時の引数に渡すことで、読み込みには成功しました。 | ||||
|
投稿日時: 2006-02-24 19:52
ところで、「今回は拡張子はわからない」のは何故でしょうか?
FilePartを普通に使っていれば、ファイル名をサーバに送るはずですが。 |