从 JavaScript 中的字节下载文件
Download File from Bytes in JavaScript
我想从 AJAX 响应中下载字节形式的文件。
我在 Blob
的帮助下尝试这样做:
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();
实际上是在下载pdf文件,但文件本身已损坏。
我怎样才能做到这一点?
在 Blob
构造函数而不是 createObjectURL
处设置 Blob
type
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();
我很久以前就问过这个问题,所以我在某些细节上可能有误。
原来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;
}
这是我保存 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();
};
以下是同时使用这两个函数的方法:
var sampleArr = base64ToArrayBuffer(data);
saveByteArray("Sample Report", sampleArr);
您只需添加一行就可以了。您的响应是来自服务器应用程序的字节数组
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();
我想从 AJAX 响应中下载字节形式的文件。
我在 Blob
的帮助下尝试这样做:
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();
实际上是在下载pdf文件,但文件本身已损坏。
我怎样才能做到这一点?
在 Blob
构造函数而不是 createObjectURL
Blob
type
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();
我很久以前就问过这个问题,所以我在某些细节上可能有误。
原来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;
}
这是我保存 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();
};
以下是同时使用这两个函数的方法:
var sampleArr = base64ToArrayBuffer(data);
saveByteArray("Sample Report", sampleArr);
您只需添加一行就可以了。您的响应是来自服务器应用程序的字节数组
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();