使用ajax从Byte数组下载PDF

时间:2015-10-16 16:04:44

标签: javascript jquery ajax

我正在尝试下面的代码,但这是创建文件但不显示内容。我需要你的帮助,我做错了什么。

    $.ajax({
    type: "POST",
    async : false,
    url: "/searchModel/createPDF",
    data:"my_param",
    contentType: 'application/octet-stream',  
    beforeSend:function(){

    }, 
    success: function(html) {
        /* html value is [37,80,68,75 .........] */
        //var file = new Blob([html], {type: 'application/pdf'});
        //var fileURL = URL.createObjectURL(file);
        //window.open(fileURL);

        var blob=new Blob([html],{type: 'application/pdf'});
        var link=document.createElement('a');
        link.href=window.URL.createObjectURL(blob);
        link.download="SearchedResults.pdf";
        link.click();

    }
 }); 

来自服务器的响应是字节数组[37,80,68,75 .........]

如果以字节为单位的数据如何以pdf格式转换,请帮助我。

2 个答案:

答案 0 :(得分:1)

您无法使用AJAX下载文件。它没有意义。您可以发送AJAX请求并在客户端上的成功处理程序中获取文件内容,但出于明显的安全原因,您无法对其进行任何操作。您无法将其保存在客户端计算机上,并且没有javascript API允许您提示用户保存位置。

所以要下载文件,不要使用AJAX。创建一个指向服务器端脚本的锚点,该脚本提供要下载的文件。

示例:



window.downloadfile = function(e){
  window.location = "/searchModel/createPDF?" +  "my_param";
}

<a href="#" onclick="downloadfile()">download file</a>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

是的,你说人们说使用AJAX下载PDF并不正确。

 window.location = "/searchModel/createPDF?" + "my_param";

就足够了,只需要从服务器端渲染pdf。它是默认可下载的。感谢您的建议