- ベストアンサー
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 + "]"); }
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
>hoge.exeという名前のファイルはダウンロードできるのですが、それが実はテキストで、メモ帳で開くと、ダウンロード画面のhtmlが表示されます。 これが妙ですね。要するに、hoge.exeではなく、誤って○○.htmlのファイルが送られている、ということですよね。 WindowsとLinuxの違いというと、ファイルのパスが違うというのが思い浮かぶんですが、ひょっとしてdownloadメソッドを呼び出す際に渡される引数の値そのものが意図したものと違っている可能性はないでしょうか。 例えば、渡されているfilenameはどのようなものでしょうか。RealPath(絶対パス)になってますか? ひょっとして相対パスのままだったりファイル名のみだったりしませんか? まずは引数がすべて正常に渡されているかどうかを確認してみてはいかがでしょう。
その他の回答 (1)
クライアントのブラウザは何ですか?
お礼
返信ありがとうございます。 クライアントのブラウザはInternetExplorer6.0です。 同様の内容を補足しましたが、このサイトをご覧になる方の為にこちらにも補足させてください。 問題は解決となりましたが、返信を頂きまして、ありがとうございました。
お礼
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の仕様なのでしょうか。そこに意識を奪われて混乱してしまいました。