Jah*_*nov 41 javascript post response request
我想从AJAX响应中下载以字节形式出现的文件.
我试图通过以下方式这样做Bolb:
var blob=new Blob([resultByte], {type: "application/pdf"});
var link=document.createElement('a');
link.href=window.URL.createObjectURL(blob);
link.download="myFileName.pdf";
link.click();
Run Code Online (Sandbox Code Playgroud)
它实际上是下载pdf文件但文件本身已损坏.
我怎么能做到这一点?
Jah*_*nov 99
我问了很长时间的问题,所以我可能在某些细节上错了.
Blob因为它原来需要数组缓冲区.这就是为什么base64字节需要首先转换为数组缓冲区的原因.
这是执行此操作的功能:
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;
}
Run Code Online (Sandbox Code Playgroud)
这是我保存pdf文件的功能:
function saveByteArray(reportName, byte) {
var blob = new Blob([byte], {type: "application/pdf"});
var link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
var fileName = reportName;
link.download = fileName;
link.click();
};
Run Code Online (Sandbox Code Playgroud)
以下是如何将这两个函数结合使用:
var sampleArr = base64ToArrayBuffer(data);
saveByteArray("Sample Report", sampleArr);
Run Code Online (Sandbox Code Playgroud)
你只需要添加一个额外的行,它应该工作.您的响应是服务器应用程序的字节数组
var bytes = new Uint8Array(resultByte); // 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();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
60162 次 |
| 最近记录: |