- - PR -
外部ファイル取り込み
| 投稿者 | 投稿内容 | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2003-12-11 18:22
始めまして。いつも参考にさせて頂いている新米です。今回件名の通りファイルの
取りこみが上手くいかず、その解決方法がわかりません。そこで、その解決方法を 教えていただきたく質問をさせて頂きます。 簡単ですが、以下の記述をしました。 ServletInputStream in = request.getInputStream(); in.read(); 私としましてはここで、ローカルのファイルを取得してそれを読み込んでいこうとして ます。apiを見ましたら、servletInputStreamクラスのreadで取得できると書いてあり 実際に動かしてみますと、何故か戻り値が-1となってしまいます。 どなたかこの原因がわかりますでしょうか。以上、宜しくお願いします。 | ||||||||||||
|
投稿日時: 2003-12-11 18:28
ローカルのファイルを、どうやってサーブレットに渡そうとしていますか? | ||||||||||||
|
投稿日時: 2003-12-11 18:33
たーぞうさん、早速の書込みありがとうございます。
質問のファイルをどうやって渡しているのかですが、jspでinput,fileタグを使ってます 。これで、サーバ側のrequestで取得できると会社の人から教えて頂きそのように 考えて実装してます。何かこの方法ですと、まずいことでもあるのでしょうか。 宜しくお願いします。 | ||||||||||||
|
投稿日時: 2003-12-11 18:41
何とも言えませんが、ファイルを送信できていない可能性もあるので、JSPの該当箇所を書き込んでいただけますか? | ||||||||||||
|
投稿日時: 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(); こんな感じです。呼ばれた画面はまだ殆ど作成してません。 宜しくお願いします。 | ||||||||||||
|
投稿日時: 2003-12-11 19:22
HTTPでのファイルのアップロード処理は、あなたが考えられているほど簡単ではありません。
ServletRequest#GetInputStreamを使えばHTTPリクエストボディを取得できますが、その 内容はファイルの中身そのものではなく、MIMEエンコーディングされた形式で入ってきます。 これを自力で処理するのは大変なので、Jakarta CommonsプロジェクトのFileUpload コンポーネントを使うのがいいでしょう。 http://jakarta.apache.org/commons/fileupload/ を参照してください。 なお、作成されたJSPで入力ストリームの内容が取得できないのは、どこかですでにストリーム を読んでしまっているからではないかと思います。入力パラメータを取得したりすると、その 時点で入力ストリームが読まれてしまっているのでその後に取得しようとしてもできません。 | ||||||||||||
|
投稿日時: 2003-12-11 19:40
UKさん、返信ありがとうございます。書かれた内容で質問が2つあります。
まず1つ目ですが、これは過去ログにあるようなアップロード機能なのでしょうか。 自分がこの機能について聞いた人によりますと、わざわざアップロードしなくても データは取得できるのではないかと言われたのですが・・・。 2つ目の質問ですが、既にこのJSPでは取得できないと書かれていますが、本に書いて あるとおり記入したつもりなのですが・・・。という事はこの方法では取得できない ということで、その他の方法はあるのでしょうか。 以上、基本的な質問ですが宜しくお願いします。 | ||||||||||||
|
投稿日時: 2003-12-11 19:51
「過去ログ」がどれを指しているのか不明確ですが、おそらくそうでしょう。
ではまずその人にどのような方法を想定しているかを聞いてください。
書かれているJSPのコードは省略されていると思いますが、リクエストボディを参照するような 処理がその前に書かれているのではないでしょうか。あと、file2というURLは直接JSPを呼び 出しているのでしょうか? もしJSPの前にサーブレットが呼び出されていてそのサーブレットで リクエストボディを参照しているのなら同様の現象になります。 まずは、HTTPリクエスト/レスポンスの仕組みから学ぶべきだと思います。 | ||||||||||||
