JSF - 尝试下载PDF文件,但它会使用奇怪的字符重新呈现页面

时间:2017-08-25 13:13:19

标签: servlets download richfaces jsf-1.2

我已经阅读了很多文章,没有人为我解决过这个问题。

首先,我正在使用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处理,出于明显的安全性原因,无法以编程方式弹出“另存为”对话框,也无法访问/操作客户端的磁盘文件系统。

0 个答案:

没有答案