下载zip文件,在使用JSF的错误IOUtils“空响应,一个空的响应是从服务器收到”(Downlo

2019-09-23 05:42发布

我从Web服务器在我的JSF豆使用Java下载zip文件。 我的代码适用于JPEG很好,但不适合ZIP。 这里是我的代码。

private void createDownloadFile(final URL downloadUrl, final String mimeType) {
    final FacesContext fc = FacesContext.getCurrentInstance();
    final ExternalContext context = fc.getExternalContext();
    final HttpServletResponse response = (HttpServletResponse) context.getResponse();
    response.setContentType(mimeType);
    response.addHeader("Content-Disposition", "attachment; filename=\"" + downloadUrl + "\"");

    try{
        final OutputStream out = response.getOutputStream();
        IOUtils.copy(downloadUrl.openStream(), out);
        fc.responseComplete();
    }catch (final IOException exc){
      exc.printStackTrace();
    }

}

这是错误:空响应,一个空的响应是从服务器收到。 任何帮助表示赞赏。

Answer 1:

空响应,一个空的响应是从服务器收到。

此消息是recognizeable作为XML在Chrome分析错误; XML解析器找不到所需的XML根元素。 在与任何你想要做的组合,这表明你正在尝试由JavaScript / AJAX下载的文件。 你不能这样做,因为JavaScript有由于明显的安全原因,没有任何设施,以迫使另存为对话框,文件内容被一直保持在一个变量。

此错误消息,因为JSF AJAX响应definied返回一个特定的XML格式,引起<partial-response><update>等。但是,如果<partial-response>根元素是在JSF Ajax响应丢失,则浏览器特异性XML解析器会/可能会出现这样那样的错误。

你需要通过一个同步请求下载的文件来代替。 卸下<f:ajax>或设置任何Ajax的拨动第三方组件的属性以false ,如<p:commandButton ajax="false">

您不必担心在浏览器页面的变化,因为你已经设置的Content-Disposition: attachment响应头时,当前页面将只是保持不变。 这个问题在下议院到IO没办法具体,顺便说一句。

也可以看看:

  • 如何提供从JSF支持bean文件下载?


文章来源: Downloading zip file with IOUtils in JSF errors with “Empty response, an empty response was recieved from the server”