Chrome 不遵守内容处置附件指令



应用程序的期望行为是提示用户输入下载位置,同时提供一个默认文件名,这在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);
    }
}

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

内容处置:附件意味着保存为附件;不一定提示保存的位置。我不明白Chrome的行为有什么问题。

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

相关内容

  • 没有找到相关文章

最新更新