【发布时间】:2019-05-09 00:26:24
【问题描述】:
我正在尝试使用 ajax 调用从服务器 (jsp) 下载 pdf 文件,我从服务器获取 Base 64 格式的数据,然后将其转换为 ArrayBuffer,然后使用 blob 对象下载它,下面的代码适用于除了 iPhone 中的 chrome 之外的所有浏览器,即使在 iphone 的 Safari 中也可以正常工作,我不知道是什么问题,任何有关这方面的帮助将不胜感激
function hello(id)
{
//alert(id);
//alert(id);
var ln="en";
$.ajax({
type:'post',
url:'ajaxurl',
data:{lang:ln,num_srno:id},
success:function(data){
//alert(data);
/* var bytes = new Uint8Array(data); // pass your byte response to this constructor
var blob=new Blob([bytes], {type: "application/pdf"});// change resultByte to bytes
var link=document.createElement('a');
link.href=window.URL.createObjectURL(blob);
link.download="myFileName.pdf";
link.click();*/
var sampleArr = base64ToArrayBuffer(data);
saveByteArray("Sample Report", sampleArr);
}
});
}
function base64ToArrayBuffer(base64) {
var binaryString = window.atob(base64);
var binaryLen = binaryString.length;
var bytes = new Uint8Array(binaryLen);
for (var i = 0; i < binaryLen; i++) {
var ascii = binaryString.charCodeAt(i);
bytes[i] = ascii;
}
return bytes;
}
function saveByteArray(reportName, byte) {
var blob = new Blob([byte], {type: "application/pdf"});
var link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
//link.href=window.webkitURL.createObjectURL(blob);
//a.download = file_path.substr(file_path.lastIndexOf('/') + 1);
var fileName = reportName;
link.download = fileName.substr(fileName.lastIndexOf('/') + 1);
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
};
【问题讨论】:
-
它在我的 Chrome 中运行。请记住,Chrome 具有自动下载功能。你能检查一下日志吗?
-
它适用于 windows chrome ,osx( mac book ) chrome 但不适用于 i-phone chrome 浏览器。
标签: javascript jquery ios google-chrome blob