0

呼び出されたときに開く/保存ダイアログを開始するために呼び出されることになっている Spring 3 フレームワーク webapp にダウンロードコントローラーを実装しました。

実際に開く/保存ダイアログを開始し、保存は正常に機能します。しかし、[開く] をクリックすると、ファイル名に ".htm" が追加され、すべて間違って開かれます。なんで?

コントローラ:

@RequestMapping("download/downloadFile")
    @ResponseBody
    public byte[] downloadFile(@RequestParam String fileID, HttpServletResponse response) {

        response.setContentType("application/octet-stream");
        File file = getFileByID(fileID);                       

        byte[] bytes = FileCopyUtils.copyToByteArray(file);

        response.setHeader("Content-Disposition", "attachment; filename=\"" + file.getName() + "\"");     
        response.setContentLength(bytes.length);

        return bytes;
    }

応答ヘッダーを見ると、コンテンツ タイプが text/html であることがわかります。これは、私の設定を application/octet-stream に無視したようです!

Cache-Control   no-cache, no-store
Connection  close
Content-Disposition attachment; filename="test.txt"
Content-Length  22071
Content-Type    text/html
Date    Tue, 05 Feb 2013 21:12:20 GMT
Expires Thu, 01 Jan 1970 00:00:00 GMT
Pragma  no-cache
Server  Apache/2.2.10 (Linux/SUSE)
X-Powered-By    Servlet/2.5 JSP/2.1
X-UA-Compatible IE=8, chrome=1

おそらく、web.xml で Spring MVC をセットアップする方法が原因でしょうか?

<servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>*.html</url-pattern>
</servlet-mapping>

すべてが「.html」で終わる URL にマップされ、ブラウザがそれを見ているのはどこですか?

4

1 に答える 1