解決済み

strutsでファイルダウンロード(WinでOK,linuxでNG)

  • 暇なときにでも
  • 質問No.2231067
  • 閲覧数628
  • ありがとう数2
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 88% (32/36)

strutsでWindowsのexeファイルのダウンロードを実装しましたが、Windows上のtomcatにdeployすると正常にダウンロードできるのに、linux(fedora-core3)上のtomcatにdeployすると、ダウンロードしたファイルがhtmlになってしまいます。
hoge.exeという名前のファイルはダウンロードできるのですが、それが実はテキストで、メモ帳で開くと、ダウンロード画面のhtmlが表示されます。

この状況は何によって生み出されているのでしょうか。
お分かりになる方、ヒントをお願いいたします。

以下にファイルダウンロード部のソース(抜粋)を掲載させていただきます。
----- 以下ソース -----
protected void download(HttpServletResponse response, String fileType, String filename) {

try {

// exeファイルのダウンロード時
if (fileType.equals("application/octet-stream")) {
response.setHeader("Content-Disposition", "attachment; filename=" + filename);
}

response.setContentType(fileType);

BufferedInputStream bis = new BufferedInputStream(new FileInputStream(filename));
BufferedOutputStream bos = new BufferedOutputStream(response.getOutputStream());

byte[] buf = new byte[128];

int size;
while ((size = bis.read(buf, 0, buf.length)) != -1) {
bos.write(buf, 0, size);
}

bos.close();
bis.close();

} catch (IOException e) {
throw new thisSystemException("could not send file[" + filename + "]");
}

質問者が選んだベストアンサー

  • 回答No.2
>hoge.exeという名前のファイルはダウンロードできるのですが、それが実はテキストで、メモ帳で開くと、ダウンロード画面のhtmlが表示されます。

これが妙ですね。要するに、hoge.exeではなく、誤って○○.htmlのファイルが送られている、ということですよね。
 WindowsとLinuxの違いというと、ファイルのパスが違うというのが思い浮かぶんですが、ひょっとしてdownloadメソッドを呼び出す際に渡される引数の値そのものが意図したものと違っている可能性はないでしょうか。
 例えば、渡されているfilenameはどのようなものでしょうか。RealPath(絶対パス)になってますか? ひょっとして相対パスのままだったりファイル名のみだったりしませんか?
 まずは引数がすべて正常に渡されているかどうかを確認してみてはいかがでしょう。
お礼コメント
ibayac

お礼率 88% (32/36)

Kyon2_PaPaさん、ありがとうございました。
まさに仰っていた通りの問題でした。
こちらは/usr/local/tomcat/work/download/a.exe をサーバーに用意していたのですが、サーブレットでは/work/download/a.exe をファイル名として与えていました。
てっきりtomcatからの相対パスを与えていると思いこんでいましたので、何度見ても正しいと思っていたのですが、最初に/がついているので絶対パスとして見てしまっていたようです。
tomcat/logs/catalina.outを追ってみると、[java.io.FileNotFoundException: /work/download/a.exe (No such file or directory)]の文字が・・・。

お騒がせしました。解決いたしました。

※しかし、ファイルが存在しないとhtmlを吐くとは驚きです。tomcatの仕様なのでしょうか。そこに意識を奪われて混乱してしまいました。
投稿日時 - 2006-06-22 15:41:28

その他の回答 (全1件)

  • 回答No.1
クライアントのブラウザは何ですか?
お礼コメント
ibayac

お礼率 88% (32/36)

返信ありがとうございます。
クライアントのブラウザはInternetExplorer6.0です。
同様の内容を補足しましたが、このサイトをご覧になる方の為にこちらにも補足させてください。
問題は解決となりましたが、返信を頂きまして、ありがとうございました。
投稿日時 - 2006-06-22 15:43:46
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
関連するQ&A
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,600万件のQ&Aを分析して最適な回答をご提案します。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

ピックアップ

ページ先頭へ