使用Ajax下载并打开pdf文件

我有一个生成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;
   }
}

我通过Ajax调用来调用这个action 。 我不知道如何将此流传送到浏览器。 我尝试了几件事,但没有成功。

$.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));
    }
});

以上给出了错误:

您的浏览器发送了此服务器无法理解的请求。


你不一定需要Ajax。 如果您在服务器端代码中将content-dispositionattachment ,则只需<a>链接即可。 通过这种方式,父页面将保持打开状态,如果这是您的主要关注点(为什么您不必要地为此选择了Ajax?)。 此外,没有办法很好地处理这个异步。 PDF不是字符数据。 它是二进制数据。 你不能做像$(element).load()这样的东西。 你想为此使用全新的请求。 为此<a href="pdfservlet/filename.pdf">pdf</a>是完全合适的。

为了帮助您更好地了解服务器端代码,您需要详细讲述所使用的语言并张贴代码尝试的摘录。


这是我如何得到这个工作

$.ajax({
  url: '<URL_TO_FILE>',
  success: function(data) {
    var blob=new Blob([data]);
    var link=document.createElement('a');
    link.href=window.URL.createObjectURL(blob);
    link.download="<FILENAME_TO_SAVE_WITH_EXTENSION>";
    link.click();
  }
});

我并不认为过去的答案都能找出原始海报的问题。 他们都假设一个GET请求,而海报试图发布数据并获得响应下载。

在寻找更好的答案的过程中,我们发现了这个用于请求类似Ajax的文件下载的jQuery插件。

在其“心脏”中,它创建一个包含给定数据的“临时”HTML表单作为输入字段。 此表单被附加到文档并发布到所需的URL。 在此之后,表单又被删除:

jQuery('<form action="'+ url +'" method="'+ (method||'post') +'">'+inputs+'</form>')
    .appendTo('body').submit().remove()

更新 Mayur的答案看起来相当有前途,并且与我提到的jQuery插件相比非常简单。

链接地址: http://www.djcxy.com/p/36445.html

上一篇: Download and open pdf file using Ajax

下一篇: How to embed PDF in a web page without javascript