- - PR -
テキストファイルのダウンロード(開く)ができません
1
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2003-10-24 13:18
下にファイルのダウンロード機能についての質問がありましたが、
内容が若干違うように思いましたので、別スレッドを立てさせて頂きました。 環境:Linux Apache+Tomcat+JDK1.3 IE6 SP1 Servletを使用して、サーバからクライアントへのファイルダウンロード処理を 実行しようと思っています。 ダウンロードダイアログボックスで、「開く」を選択すると、Word、Excelファイル (AAA.doc、AAA.xls)は問題なく開けるのですが、テキストファイル(AAA.txt)だと、 ダイアログボックスが2度開き、2度目に「開く」を選択すると 「ファイル C:\\Document and Setting・・・\\Temporary InternetFiles\\Content.IE5\\xxxx\\AAA.txt[1]が見つかりません」 というエラーが表示されます。 一旦保存した後、ファイルを開くという処理を行うと問題なく開けます。 setContentTypeに"octet-stream"、"octet-stream-dummy"、"text/plain"を 設定してみたのですが、情況は変わりません。 これは、Servletの問題ではなく、どこかの設定が問題なのかとも 考えたのですが、どこの設定なのか見当がつきません。 下記にテスト用に作成したServletのソースを添付致します。 なにか見落としている点があればご指摘下さい。宜しくお願い致します。 Fname = "AAA.txt"; path = "/samplefile/SampleText.txt"; res.setContentType("text.plain"); res.setHeader("Content-Disposition", "attachment;filename=\\""+ Fname + "\\""); res.setHeader("Content-Language","ja"); getServletContext().getRequestDispatcher(path).forward(req, res); | ||||
|
投稿日時: 2003-10-24 13:27
ニシトミです
確かファイルダウンロードにアクセスする HTML側の設定で,form内のmethd=をgetとしないとだめだったような 気がします。 ここの会議室にもそんなスレッドがあったような http://support.microsoft.com/default.aspx?scid=kb;ja;238588 ↑が参考になるかもしれません 違ったらすみません | ||||
|
投稿日時: 2003-10-24 14:42
返信ありがとうございます。
ニシトミ様のアドバイス通り、METHOD="get"に変更したところ、ダイアログボックスの2度空きは解消されました。しかし、依然として「開く」を選択するとエラーが発生してしまいます。 エラー: 「ファイル C:\\Document and Setting・・・\\Temporary InternetFiles\\Content.IE5\\xxxx\\AAA.txt[1]が見つかりません」 又、HTMLファイル(.html)のダウンロードもうまく作動しません。 こちらは、エラーはでないのですが、ファイルが開かないのです。 (ダウンロード中のダイアログは一瞬表示されるのですが・・・) 全てのファイルが同様に開かないのであれば、完全にプログラムを疑うのですが .docや.xlsが順調に作動していますし、ファイル名や、ContentType(実際のプログラムではJAFのgetcontenttypeで取得しています)も正しく取れていることを確認済みです。 もうしばらくお知恵を拝借致したく、宜しくお願い致します。 | ||||
|
投稿日時: 2003-10-24 15:38
こんにちは
スレッドはここでした http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=5606&forum=12 JAFのgetContentTypeを使ったことが無いので、わかりませんが ちゃんと取れてるということなので疑いません...
別にMNMさんの方法を否定するつもりはありませんが 以下に 以前作ったサンプルコードを見ずらいですが編集して添付しておきます //ファイルを取得する File downloadFile = new File("hogehoge"); byte[] rBuf = new byte[(int)downloadFile.length()]; FileInputStream fis = null; int fisSize = 0; try { fis = new FileInputStream(downloadFile); //fisSize = fis.read(rBuf); fisSize = fis.read(rBuf,0,(int)downloadFile.length()); } catch (IOException ie) { throw ie; } //コンテントタイプをセットする response.setContentType(); //ファイル名をセットする response.addHeader("Content-Disposition", "attachment;filename="+"hogehoge" ); ServletOutputStream sos = null; sos = response.getOutputStream(); try { sos.write(rBuf,0,fisSize); //sos.flush(); } catch (SocketException se) { throw se; } catch (Exception e) { throw e; } finally { fis.close(); } sos.close(); こんな感じです また補足ですがFileのパス関連の、セパレータは File.separatorで取得できます こうしとくと、サーバの環境が変わった時にも対応できますね [ メッセージ編集済み 編集者: ニシトミ 編集日時 2003-10-24 15:41 ] | ||||
|
投稿日時: 2003-10-24 16:15
サンプルコード、じっくり見て(初心者なので・・・)使わせて頂きます。
ありがとうございます。 >別にMNMさんの方法を否定するつもりはありませんが いえいえ、元はWebに公開されていたソースをマネしただけなので 逆に色々な方法を教えて頂いたほうが、うれしいです。 またご報告させて頂きますので、宜しくお願い致します。 | ||||
1
