java - 使用 Struts2 提示下载文件

标签 java google-chrome download struts2 http-headers

我正在使用 Struts2 下载文件。当我单击按钮下载文件时,文件会自行下载并在 Excel 中打开,而不是我希望下载它,当我右键单击它时,我应该能够打开或保存它。在 IEFirefox 中,我会看到一个打开或保存文件的窗口,但在 Chrome 中,文件文件会自行在 Excel 中打开。有什么方法可以像 FirefoxIE 一样在 Chrome 中使用它

行动

public String viewReport() throws Exception {
    boolean returnReport;
    inputStream = new FileInputStream(DOCUSIGN_REPORT_FILE);

    try {
        returnReport = validateRequest();
        if (returnReport) {

        intgList = this.generateViewIntegrationReportData(getESignUIConfig());
        this.createCSVFile(intgList, DOCUSIGN_REPORT_FILE);

        } else {
            failureResponse(msgs, 400);
            return null;
        }
    } catch (Exception e) {
        e.printStackTrace();
        msgs.add(new Message(ESignatureIntegrationMessageTypeEnum.MESSAGE_TYPE_ERROR, 
                    UiIntegrationKeyConstants.UI_INTEGRATION_ERROR_CODE_500, UiIntegrationKeyConstants.UI_INTEGRATION_ERROR_TEXT_SERVICE_ERROR));
        failureResponse(msgs, 500);
        return null;
    }

    return UiIntegrationKeyConstants.REPORT_REPSONSE;
} 

Struts.xml

<action name="*Integration" method="{1}" class="foo.bar.ESignatureIntegrationAction">
    <result name="success" type="tiles">integrationView</result>  
    <result name="reportResponse" type="stream"> 
        <param name="contentType">application/text/csv</param>
        <param name="inputName">inputStream</param>  
        <param name="contentDisposition">
            attachment;filename="DocuSignEnvelopeReport.csv"
        </param> 
        <param name="bufferSize">4096</param>
    </result>  
</action>

最佳答案

询问是否使用桌面应用程序打开文件或保存文件的提示由设置为 attachment(您已设置)的 contentDisposition HTTP header 给出。相反,inline 会尝试使用浏览器插件打开文件,而不询问任何内容。

也就是说,您的问题背后的原因是您(或有权访问您计算机的人)之前已指示 Chrome 始终打开此类文件,而这就是为什么它不这样做的原因再次询问您要做什么:

enter image description here


解决方案是从设置中清除此选项


自定义和控制 Google Chrome 设置 + 显示高级设置 清除自动打开设置


enter image description here

关于java - 使用 Struts2 提示下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38645067/

相关文章:

c# - 发送文件到客户端并删除

java - 我不断收到 java.util.concurrentmodificationexception.. 如何解决这个问题?

java - 如何在Spring Data R2DBC中运行@Sql之类的查询进行测试

javascript - 不安全的 JavaScript 尝试访问 Google Chrome 中的框架

CSS 变换缩放动画在 Firefox 中不起作用

php - 关于PHP文件下载

java - 使用 JButton 从 JList 中删除项目,但不会刷新

java - 在4列 ListView android中过滤数据

google-chrome - 编辑 chrome 扩展的 list 文件

Java - 使用 Socket 通过浏览器下载文件