Chrome不遵守Content-Disposition Attachment指令

3
应用程序的期望行为是,在提供默认文件名的同时提示用户选择下载位置,这在IE和FF中运行良好,但Chrome总是自动将其强制下载到下载目录。我知道Chrome在“设置-高级-每次下载时询问保存位置”选项中有此功能。该选项的缺点是它适用于所有页面,而我们测试过其他项目需要遵循内联行为,因此这些情况会直接冲突。我搜索了一下,但没有找到任何明确说明Chrome是否支持此功能,但我认为奇怪的是,这种长期存在并与多个RFC相关联的行为未被Chrome遵循,而Chrome总是被称为符合标准的浏览器。以下是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个回答

1

Content-Disposition: attachment意味着将其保存为附件;不一定提示保存在哪里。我不明白Chrome的行为有什么问题。

另外,一个小问题:如果文件名包含非ASCII字符,你的代码将生成损坏的头字段。


谢谢回复。我确实质疑此情况下附件的行为。按照我阅读的RFC 2616RFC 6266,带有disposition-header的文件应该提示保存对话框。我发现的唯一有趣的注释是关于application/octet-stream MIME类型与attachment一起使用时也应该这样行事。也许Chrome不遵循我的类型设置为application/vnd.ms-powerpoint的方式。 - munkyxtc
1
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - munkyxtc
嘿 @munkyxtc,你的尝试有成功吗?我也遇到了同样的问题 :( - Muthu Raman
@MuthuRaman 我从未按照我设定的方式解决问题。在阅读了很多相关主题后,它似乎是一个无望的事情。Chrome默认会将其保存到他们的下载目录中。在Chrome中有一个设置可以提示每次保存到哪里,但由于我没有访问每台计算机的权限,也不想让每个下载都提示该设置,所以这个设置是毫无用处的。我选择允许浏览器按照配置进行解释。自从发布以来的最后一年里,更多的浏览器似乎都遵循着这种逻辑。即使是新版本的IE也会自动下载它。 - munkyxtc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接