我已经阅读了很多文章,没有人为我解决过这个问题。
首先,我正在使用RichFaces fileUpload组件,在上传文件时工作正常。但是当我试图检索文件以便下载它时(例如,它作为字节数组从数据库中检索出来),页面会重新加载一堆奇怪的字符。
这是我的下载功能:
https://www.googleapis.com/oauth2/v4/token
调用此函数时,页面会重新加载一堆奇怪的字符。我想知道为什么没有调用“另存为”窗口,所以我可以有效地保存文件。
Example showing the strange characters
值得一提的是,当通过下面的代码创建一个新文件时,它可以很好地工作。
public void downloadFile() {
HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "attachment; filename=file.pdf");
try {
ServletOutputStream os = response.getOutputStream();
os.write(uploadItem.getData()); // uploadItem.getData() returns a byte array
os.flush();
os.close();
FacesContext.getCurrentInstance().responseComplete();
} catch(Exception e) {
LOG.error("\nFailure : " + e.toString() + "\n");
}
}
提前致谢!
解决
正如@BalusC所说(thanx!)this article包含解决问题所需的直接信息。
这表明请求是ajax请求。您无法通过> ajax下载文件。 Ajax请求由JavaScript处理,出于明显的安全性原因,无法以编程方式弹出“另存为”对话框,也无法访问/操作客户端的磁盘文件系统。