下载文件时 Chrome 返回 ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION 错误

I l*_*ing 1 jsf primefaces

我已经实现了一种以这种方式导出 PDF 中的一些信息的机制:

public void generatePdf() {
    String fileName = "Bolla_" + productionOrder.getOrderNumber();
    writePDFToResponse(new GenerateStatusPDF(companyInfo).generate(productionOrder), fileName);
}

private void writePDFToResponse(ByteArrayOutputStream baos, String fileName) {
    try {
        ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
        externalContext.responseReset();
        externalContext.setResponseContentType("application/pdf");
        externalContext.setResponseHeader("Expires", "0");
        externalContext.setResponseHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");
        externalContext.setResponseHeader("Pragma", "public");
        externalContext.setResponseHeader("Content-disposition", "attachment, filename=" + fileName + ".pdf");
        externalContext.setResponseContentLength(baos.size());
        java.io.OutputStream out = externalContext.getResponseOutputStream();
        baos.writeTo(out);
        externalContext.responseFlushBuffer();
        FacesContext.getCurrentInstance().responseComplete();
    } catch (Exception e) {
        e.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的.xhtml文件使用情况:

<h:commandLink>
                        <p:graphicImage name="/ultima-layout/images/pdf_icon.png"
                            width="64px" />
                        <p:fileDownload
                            value="#{productionOrderStatusView.generatePdf()}" />
                    </h:commandLink>
Run Code Online (Sandbox Code Playgroud)

我不知道为什么,但最近几天我遇到了一些问题,出现了以下错误:

ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION
Run Code Online (Sandbox Code Playgroud)

我哪里错了?谷歌浏览器可能有一些新的更新吗?

Sas*_*r M 7

文件名可能有逗号。

通常在文件名中添加双引号以避免重复字符,例如 ("Content-Disposition", "attachment;filename=\"" + filename + "\"")

请看一下标准。https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition