Sta*_*tch 3 javascript buffer file xmlhttprequest binary-data
我正在从客户端的节点/express 端点接收数据缓冲区,并且我想将缓冲区转换为文件。
该文件可以是 pdf、文本文档或图像。端点告诉我的唯一信息是它正在发送一个八位字节流。
我该怎么做呢?
这是我迄今为止在客户端的代码
const xhr = new XMLHttpRequest();
xhr.open("POST", "MY_URL", true);
xhr.responseType = "arraybuffer";
// I need to send some data for the request
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
// send request
xhr.send(`identifier=${myIdentifier}`);
xhr.onload = function (xEvent)
{
const arrayBuffer = xhr.response;
if (arrayBuffer)
{
const byteArray = new Uint8Array(arrayBuffer);
const url = window.URL.createObjectURL(new Blob([byteArray]));
const link = document.createElement("a");
link.href = url;
link.setAttribute("download", "file.pdf"); //or any other extension
document.body.appendChild(link);
link.click();
}
};
Run Code Online (Sandbox Code Playgroud)
将arraybuffer转换为base64,然后转换为url,生成fileUrl用于查看
arrayBufferToBase64(Arraybuffer, Filetype, fileName) {
let binary = '';
const bytes = new Uint8Array(Arraybuffer);
const len = bytes.byteLength;
for (let i = 0; i < len; i++) {
binary += String.fromCharCode(bytes[i]);
}
const file = window.btoa(binary);
const mimType = Filetype === 'pdf' ? 'application/pdf' : Filetype === 'xlsx' ? 'application/xlsx' :
Filetype === 'pptx' ? 'application/pptx' : Filetype === 'csv' ? 'application/csv' : Filetype === 'docx' ? 'application/docx' :
Filetype === 'jpg' ? 'application/jpg' : Filetype === 'png' ? 'application/png' : '';
const url = `data:${mimType};base64,` + file;
// url for the file
this.fileUrl = this.sanitizer.bypassSecurityTrustResourceUrl(url);
// download the file
const a = document.createElement('a');
a.href = url;
a.download = fileName;
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
window.URL.revokeObjectURL(url);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10032 次 |
| 最近记录: |