Chrome不遵守Content-Disposition Attachment指令

时间:2015-01-13 21:28:46

标签: java google-chrome browser content-disposition

应用程序的所需行为是提示用户下载位置,同时提供默认文件名,该文件名在IE& FF但Chrome总是强制它自动进入下载目录。

我知道chrome在“设置”中有选项>高级> “在下载之前询问保存每个文件的位置”此选项的缺点是它适用于所有页面的全局,而我测试的其他项目我们希望遵循内联行为,因此这些案例彼此直接冲突

我在周围搜索但找不到任何明确的说明它在Chrome中是否存在或者是不可能但是我发现奇怪的是,Chrome已经存在了这么长时间并且附加了多个RFC的行为。总是被称为符合标准。 以下是根据Chrome开发工具

在浏览器中接收标头的方式
HTTP/1.1 200 OK    
Content-Type: application/vnd.ms-powerpoint    
Content-Disposition: attachment; filename="presentation.ppt"    
Content-Language: en-US    
Transfer-Encoding: chunked
Date: Tue, 13 Jan 2015 19:18:27 GMT
Server: WebSphere Application Server/7.0

以下是设置标头服务器端的代码

public void generatePowerPoint(HttpSession session, HttpServletResponse response){
    String id = (String) session.getAttribute(ApplicationConstants.ID);
    SlideShow ppt = reportService.generatePowerPoint(id);
    try{
        StringBuilder sb = new StringBuilder();
        sb.append("presentation_").append(id).append(".ppt");

        response.setContentType("application/vnd.ms-powerpoint");
        response.setHeader("Content-Disposition", "attachment; filename=\"" + sb.toString()+ "\"");
        OutputStream out = response.getOutputStream();
        ppt.write(out);
        out.flush();
        out.close();
    }
    catch(IOException e) {
        logger.error("The ppt could not be generated: ", e);
    }
}

任何人都有任何意见?这不可能吗?解决方法?如果您需要更多细节,请告诉我。

1 个答案:

答案 0 :(得分:0)

内容 - 处置:附件意味着保存为附件;不一定提示在哪里保存。我没有看到Chrome的行为有什么问题。

另外,如果文件名包含非ASCII字符,则代码将生成损坏的标题字段。