Content-Disposition文件扩展名无法在Firefox上正常使用

时间:2013-08-02 14:10:49

标签: java spring-mvc csv browser content-disposition

我在Spring Controller上有以下代码

@RequestMapping(value = "/download", method = RequestMethod.POST)
 public void downloadActive(@RequestParam(value = "type") String offerType, HttpServletResponse response,
            HttpSession session) throws Exception {

 StringBuilder b = new StringBuilder();.
.
.

response.addHeader("Content-Disposition: ", "attachment; filename=my" + offerType + "Offers.csv");
response.getWriter().write(b.toString());
..

}

单击来自EXt Js的下载按钮时,将执行此代码。在chrome上,它直接以* .csv格式下载文件,当用户打开它时,它将自动使用Excel打开文件,如果它们已经安装,这是我想要的正确行为。

但是,在firefox上,它会提示保存为窗口,其中包含打开方式和保存选项。如果我使用open with option,它告诉我文件名是filename.csv但类型是chrome htm文件。我没有在我的代码中的任何地方提到过htm,我不知道为什么它试图将其打开为htm而不是csv文件。一旦它试图打开它,它就会带来excel应用程序,内容格式也很糟糕。

有没有办法在firefox上避免这个问题?

由于

4 个答案:

答案 0 :(得分:3)

为文件名添加双引号(")可以解决问题。

response.setHeader("Content-disposition", "attachment; filename=\"" + fileName + "");

答案 1 :(得分:0)

即使我不确定它为什么会起作用,将addHeader方法更改为setHeader也可以解决问题。

response.setHeader("Content-Disposition: ", "attachment; filename=my" + offerType + "Offers.csv");

答案 2 :(得分:0)

PrintWriter printWriter = resourceResponse.getWriter();
java.util.Date date = new java.util.Date();
resourceResponse.setContentType("text/csv");
resourceResponse.addProperty(HttpHeaders.CACHE_CONTROL,
        "max-age=0, must-revalidate");
resourceResponse.setProperty(
        HttpHeaders.CONTENT_DISPOSITION,
        "attachment; filename=" + "export_build" + "_"
                + date.getTime() + ".csv");
printWriter.write(stringBuilder.toString());

确保在打印标题后编写内容,以确保将内容正确打包在文件中。

答案 3 :(得分:-1)

response.setContentType( “应用/八位字节流”); //没有I18n
response.setHeader(“Content-Disposition”,“attachment; filename = \”“+”response.txt“+”\“”); 。response.getOutputStream()写( “SSS” .getBytes());

它不起作用..请求是ajax xhr请求帖子