Java 在JSF中下载带有IOUtils的zip文件时出错,错误为;空响应,从服务器接收到空响应;
我正在JSFbean中使用Java从web服务器下载zip文件。我的代码适用于JPEG,但不适用于ZIP。这是我的密码Java 在JSF中下载带有IOUtils的zip文件时出错,错误为;空响应,从服务器接收到空响应;,java,jsf,io,download,zip,Java,Jsf,Io,Download,Zip,我正在JSFbean中使用Java从web服务器下载zip文件。我的代码适用于JPEG,但不适用于ZIP。这是我的密码 private void createDownloadFile(final URL downloadUrl, final String mimeType) { final FacesContext fc = FacesContext.getCurrentInstance(); final ExternalContext context = fc.getExter
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();
}
}
这就是错误:空响应,从服务器接收到空响应。感谢您的帮助
空响应,从服务器接收到空响应
在Chrome中,此消息可识别为XML解析错误;XML解析器找不到请求的XML根元素。结合您尝试执行的任何操作,这表明您试图通过JavaScript/Ajax下载该文件。无法执行此操作,因为由于明显的安全原因,JavaScript没有强制使用保存在变量中的文件内容的另存为对话框的工具
导致此错误消息的原因是JSF ajax响应被定义为返回特定的XML格式,
,等等。但如果JSF ajax响应中缺少
根元素,则特定于浏览器的XML解析器将/可能显示此类错误
您需要通过同步请求来下载该文件。删除
或将第三方组件的任何ajax切换属性设置为false
,例如
您不必担心浏览器中的页面更改,因为您已经设置了Content-Disposition:attachment
response标题,当前页面将保持不变。顺便说一句,这个问题并不是Commons IO特有的
另见: