一尘不染

Java 使用Ajax下载并打开PDF文件

java

我有一个生成PDF的动作类。该contentType适当地设定。

public class MyAction extends ActionSupport 
{
   public String execute() {
    ...
    ...
    File report = signedPdfExporter.generateReport(xyzData, props);

    inputStream = new FileInputStream(report);
    contentDisposition = "attachment=\"" + report.getName() + "\"";
    contentType = "application/pdf";
    return SUCCESS;
   }
}

我action 通过Ajax调用来称呼它。我不知道将流传输到浏览器的方法。我尝试了几件事,但没有任何效果。

$.ajax({
    type: "POST",
    url: url,
    data: wireIdList,
    cache: false,
    success: function(response)
    {
        alert('got response');
        window.open(response);
    },
    error: function (XMLHttpRequest, textStatus, errorThrown) 
    {
        alert('Error occurred while opening fax template' 
              + getAjaxErrorString(textStatus, errorThrown));
    }
});

上面给出了错误:

Your browser sent a request that this server could not understand.

阅读 679

收藏
2020-03-11

共1个答案

一尘不染

你不必为此使用Ajax。只是一个<a>环节是不够的,如果你设置content-dispositionattachment服务器端代码。这样,如果你最关心的是父页面将保持打开状态(为什么你会为此而不必要地选择Ajax?)。此外,没有办法很好地同步处理这个问题。PDF不是字符数据。它是二进制数据。你不能做类似的事情$(element).load()。你想要对此使用全新的请求。对于那<a href="pdfservlet/filename.pdf">pdf</a>是完全合适的。

为了在服务器端代码方面为你提供更多帮助,你需要更多地介绍所使用的语言并发布代码尝试的摘录。

2020-03-11