- - PR -
ファイルダウンロードについて
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-10-05 11:19
いつもお世話になってます。迷い猫です。
今回はファイルのダウンロードについて質問させてください。 すごく初歩的なことだったら申し訳ないです><; 圧縮されているファイルを解凍し、 解凍したファイルをローカルディレクトリに ダウンロード(保存)したいのですが、 今の私のやり方では、対象のファイル名で空のファイルが 保存されます。 いくつかの方法を試してみましたが、 きちんとダイアログが表示される方法が 下記のやり方だったんですが、 このやり方では、新規でファイルを作るという 形になってしまうのでしょうか? 説明不足で申し訳ないのですが、ご教授のほど宜しくお願い致します。 ソース =============================== Start response.setContentType( "application/octet-stream" ); response.setHeader("Content-Disposition","attachment;filename=\""+ fileName + "" ); response.setBufferSize( 163840 ); PrintWriter out = response.getWriter(); out.println(); out.close(); ソース =============================== End 環境: WindowsXP Tomcat5.0 Eclipce2.1 Struts1.1 j2sdk1.4.1_02 | ||||||||||||
|
投稿日時: 2004-10-05 11:28
>解凍したファイルをローカルディレクトリに
>ダウンロード(保存)したいのですが それはクライアントの役割ではないでしょうか? 一レスポンスで複数のファイルを送るようなことはできないような・・。 >説明不足で申し訳ないのですが、ご教授のほど宜しくお願い致します。 説明不足であればもう少し補足してはいかがでしょう?ちょっとなにをやりたいのかわかりにくいです。 なお、J2SDK1.4.1_02 は EOL(End Of Life)を迎えた製品です。 http://java.sun.com/products/archive/j2se-eol.html もうサポートされておりませんので、現行製品の最新版、1.4.2_05 や 5.0FCS 等を利用することをお勧め致します。 http://java.sun.com/j2se/1.4.2/index.jsp http://java.sun.com/j2se/1.5/index.jsp | ||||||||||||
|
投稿日時: 2004-10-05 11:55
早速の回答ありがとうございます。
>一レスポンスで複数のファイルを送るようなことはできないような・・。 サーバー側で解凍したファイルは必ず1つで、 そのファイルをローカルにダウンロードしたいのですが・・・ サーバー側からファイルをローカルに送信(?)するやり方が、 まだ完全には理解できていないため、 もう一度、一から調べなおしてみます。 インギさんありがとうございました。 | ||||||||||||
|
投稿日時: 2004-10-05 12:11
こんにちは。
サーバからブラウザに転送したいファイル、つまりサーバから見てローカルにあるファイルを読み出し、それをレスポンスに書き出すという処理を行う必要がありますが、その処理は入ってますか? | ||||||||||||
|
投稿日時: 2004-10-05 13:18
念のためですが・・・
だけだと改行文字が出力されるだけです。
で設定されるのはファイル名だけで、ファイルそのものは関係しません。 PrintWriterにファイルの内容を書き込む処理が必要ですが、ダウンロードする ファイルはバイナリだと思いますので、文字しか扱えないPrintWriterではなく、 OutputStreamWriterなどを使うと良いと思います。
| ||||||||||||
|
投稿日時: 2004-10-05 13:59
ガビーン! ファイルはバイト列なんだからWriter使っちゃダメです… まぁテキストファイルしか扱わないなら一見問題なく動くと思いますけど。 | ||||||||||||
|
投稿日時: 2004-10-05 14:10
okutinさん、taroさん、佐々木さんご回答ありがとうございます。
>PrintWriterにファイルの内容を書き込む処理が必要ですが・・・ 内容を書き込む処理入れてませんでした。 また、検索をして、参考になりそうなものを見つけたのですが、 URLの指定をするやつで、それが一般的なやり方なんでしょうが、 まだ、webサーバーがないため、 テスト的にDドライブからCドライブにダウンロード という風に作成しています。 ローカルの場合、URLって指定できますか? >ファイルはバイト列なんだからWriter使っちゃダメです… ファイルは、エクセルだったりテキストだったり特に決まりはありません。 Writer より PrintWriter のほうがいいのでしょうか? 初歩的なことばかりで申し訳ありませんが宜しくお願い致します。 | ||||||||||||
|
投稿日時: 2004-10-05 14:25
みなさんご回答ありがとうございました。
一応ダウンロードができるようになりました。 最初に質問で出したものとはやり方が変わってしまいましたが、 下記のようにしてみました。 こっちのやり方のほうがいいよ!!というような部分がありましたら、 またアドバイスを宜しくお願い致します。 また、今はローカルで処理を行っていますが、 サーバーよりダウンロードする場合、 下記のやり方でも大丈夫なんでしょうか? response.setContentType( "application/octet-stream-dummy" ); response.setHeader("Content-Disposition","inline; filename=\"" + fileName + ""); try { DataOutputStream dos = new DataOutputStream( response.getOutputStream( ) ); FileInputStream fis = new FileInputStream(file ); byte[ ] buffer = new byte[ 1024 ]; int readbyte = 0; while( true ) { readbyte = fis.read( buffer ); if( readbyte == -1 ) { break; } dos.write( buffer, 0, readbyte ); dos.flush( ); } fis.close( ); dos.close( ); } catch( Exception ex ) { ex.printStackTrace( ); } |