- PR -

外部ファイル取り込み

投稿者投稿内容
新米くん
会議室デビュー日: 2003/12/11
投稿数: 8
投稿日時: 2003-12-11 18:22
始めまして。いつも参考にさせて頂いている新米です。今回件名の通りファイルの
取りこみが上手くいかず、その解決方法がわかりません。そこで、その解決方法を
教えていただきたく質問をさせて頂きます。
簡単ですが、以下の記述をしました。
ServletInputStream in = request.getInputStream();
in.read();
私としましてはここで、ローカルのファイルを取得してそれを読み込んでいこうとして
ます。apiを見ましたら、servletInputStreamクラスのreadで取得できると書いてあり
実際に動かしてみますと、何故か戻り値が-1となってしまいます。
どなたかこの原因がわかりますでしょうか。以上、宜しくお願いします。
たーぞう
ぬし
会議室デビュー日: 2003/08/08
投稿数: 317
お住まい・勤務地: お花畑
投稿日時: 2003-12-11 18:28
引用:

新米くんさんの書き込み (2003-12-11 18:22) より:
私としましてはここで、ローカルのファイルを取得してそれを読み込んでいこうとして
ます。apiを見ましたら、servletInputStreamクラスのreadで取得できると書いてあり


ローカルのファイルを、どうやってサーブレットに渡そうとしていますか?
新米くん
会議室デビュー日: 2003/12/11
投稿数: 8
投稿日時: 2003-12-11 18:33
たーぞうさん、早速の書込みありがとうございます。
質問のファイルをどうやって渡しているのかですが、jspでinput,fileタグを使ってます
。これで、サーバ側のrequestで取得できると会社の人から教えて頂きそのように
考えて実装してます。何かこの方法ですと、まずいことでもあるのでしょうか。
宜しくお願いします。
たーぞう
ぬし
会議室デビュー日: 2003/08/08
投稿数: 317
お住まい・勤務地: お花畑
投稿日時: 2003-12-11 18:41
引用:

新米くんさんの書き込み (2003-12-11 18:33) より:
質問のファイルをどうやって渡しているのかですが、jspでinput,fileタグを使ってます
。これで、サーバ側のrequestで取得できると会社の人から教えて頂きそのように
考えて実装してます。何かこの方法ですと、まずいことでもあるのでしょうか。


何とも言えませんが、ファイルを送信できていない可能性もあるので、JSPの該当箇所を書き込んでいただけますか?
新米くん
会議室デビュー日: 2003/12/11
投稿数: 8
投稿日時: 2003-12-11 18:55
返信ありがとうございます。該当すると思われるソースを貼りつけます。
まず、ファイル名を選択するjsp
<form name="fn" action="" method="POST">
<input type="hidden" name="fileName" value="">
<br>
ファイル:
<input type="file" size="50" name="file1">
<br>
<br>
<input type="submit" name="submit" value="submit" onclick="getFileName()">
<input type="reset" name="reset" value="reset"> <br>
<br>
</form>
onclick()時に呼ばれるjavascript
function getFileName(){
//ファイル名取得
document.fn.fileName.value=document.fn.file1.value;
fn.action = "<%= request.getContextPath() %>/control/file2";
呼ばれた次の画面のJSP
byte buffer[] = new byte[4096];
int size;
String header;
ServletInputStream in = request.getInputStream();
//<--debug
Debug.println("サーブレット入力オブジェクト" + in);
//debug-->
in.read();
こんな感じです。呼ばれた画面はまだ殆ど作成してません。
宜しくお願いします。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2003-12-11 19:22
HTTPでのファイルのアップロード処理は、あなたが考えられているほど簡単ではありません。
ServletRequest#GetInputStreamを使えばHTTPリクエストボディを取得できますが、その
内容はファイルの中身そのものではなく、MIMEエンコーディングされた形式で入ってきます。

これを自力で処理するのは大変なので、Jakarta CommonsプロジェクトのFileUpload
コンポーネントを使うのがいいでしょう。

http://jakarta.apache.org/commons/fileupload/

を参照してください。

なお、作成されたJSPで入力ストリームの内容が取得できないのは、どこかですでにストリーム
を読んでしまっているからではないかと思います。入力パラメータを取得したりすると、その
時点で入力ストリームが読まれてしまっているのでその後に取得しようとしてもできません。
新米くん
会議室デビュー日: 2003/12/11
投稿数: 8
投稿日時: 2003-12-11 19:40
UKさん、返信ありがとうございます。書かれた内容で質問が2つあります。
まず1つ目ですが、これは過去ログにあるようなアップロード機能なのでしょうか。
自分がこの機能について聞いた人によりますと、わざわざアップロードしなくても
データは取得できるのではないかと言われたのですが・・・。
2つ目の質問ですが、既にこのJSPでは取得できないと書かれていますが、本に書いて
あるとおり記入したつもりなのですが・・・。という事はこの方法では取得できない
ということで、その他の方法はあるのでしょうか。
以上、基本的な質問ですが宜しくお願いします。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2003-12-11 19:51
引用:

新米くんさんの書き込み (2003-12-11 19:40) より:
UKさん、返信ありがとうございます。書かれた内容で質問が2つあります。
まず1つ目ですが、これは過去ログにあるようなアップロード機能なのでしょうか。


「過去ログ」がどれを指しているのか不明確ですが、おそらくそうでしょう。

引用:

自分がこの機能について聞いた人によりますと、わざわざアップロードしなくても
データは取得できるのではないかと言われたのですが・・・。


ではまずその人にどのような方法を想定しているかを聞いてください。

引用:

2つ目の質問ですが、既にこのJSPでは取得できないと書かれていますが、本に書いて
あるとおり記入したつもりなのですが・・・。という事はこの方法では取得できない
ということで、その他の方法はあるのでしょうか。


書かれているJSPのコードは省略されていると思いますが、リクエストボディを参照するような
処理がその前に書かれているのではないでしょうか。あと、file2というURLは直接JSPを呼び
出しているのでしょうか? もしJSPの前にサーブレットが呼び出されていてそのサーブレットで
リクエストボディを参照しているのなら同様の現象になります。

まずは、HTTPリクエスト/レスポンスの仕組みから学ぶべきだと思います。

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