• ベストアンサー

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

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 + "]"); }

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

  • ベストアンサー
noname#49664
noname#49664
回答No.2

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

ibayac
質問者

お礼

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の仕様なのでしょうか。そこに意識を奪われて混乱してしまいました。

その他の回答 (1)

noname#19197
noname#19197
回答No.1

クライアントのブラウザは何ですか?

ibayac
質問者

お礼

返信ありがとうございます。 クライアントのブラウザはInternetExplorer6.0です。 同様の内容を補足しましたが、このサイトをご覧になる方の為にこちらにも補足させてください。 問題は解決となりましたが、返信を頂きまして、ありがとうございました。

関連するQ&A

専門家に質問してみよう