【问题标题】:Chrome not honoring Content-Disposition Attachment directiveChrome 不遵守 Content-Disposition Attachment 指令
【发布时间】:2015-03-11 23:33:27
【问题描述】:

应用程序的期望行为是提示用户提供下载位置,同时提供默认文件名,该文件名在 IE 和 FF 中运行良好,但 Chrome 总是自动将其强制下载到下载目录。

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

我四处搜索,但找不到任何明确的说明它在 Chrome 中是可能的还是不可能的,但我觉得奇怪的是,一种已经存在了这么久并且附加了多个 RFC 的行为不受 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);
    }
}

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

【问题讨论】:

    标签: java google-chrome browser content-disposition


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的回复。在这种情况下,我确实质疑依恋的行为。我阅读RFC 2616RFC 6266 的方式是使用“另存为”对话框提示具有 dispotion-header 的文件的行为。我发现只有一点有趣的注意事项是关于 MIME 类型,特别是 application/octet-stream 与附件一起也应该以这种方式运行。也许 Chrome 没有表现,因为我的类型设置为 application/vnd.ms-powerpoint
    • 为了完整起见;将标头更改为 Content-Type:application/octet-stream 并没有改变 Chrome 中的行为。
    • 嘿@munkyxtc 你的尝试有什么成功吗?对我来说同样的问题:(
    • @MuthuRaman 我从来没有按照我设定的方式解决问题。在大量阅读该主题之后,这似乎是一个失败的原因。默认情况下,Chrome 会将其保存到他们的下载目录中。在 Chrome 中找到了一个设置来提示每次保存的位置,但由于我无法访问每台计算机,也不想每次下载都提示设置是毫无价值的。我只是选择允许浏览器将其解释为配置。自发布以来的去年,更多浏览器似乎遵循相同的排序逻辑。即使是新版本的 IE 也会自动下载。
    猜你喜欢
    • 2022-01-20
    • 2011-06-18
    • 2011-04-27
    • 1970-01-01
    • 2015-03-04
    • 1970-01-01
    • 1970-01-01
    • 2021-03-08
    • 1970-01-01
    相关资源
    最近更新 更多