gpt4 book ai didi

javascript - 使用 Angular 2 和 Node.js 下载不支持 Firefox 的 PDF

转载 作者:数据小太阳 更新时间:2023-10-29 04:45:11 24 4
gpt4 key购买 nike

我正在从 Node JavaScript 后端获取 base64 字符串。但它不像 Chrome 那样工作。

我在网上找不到任何解决方案。在 API 调用中获得 200 状态,但它没有在 Firefox 中下载文件,而相同的代码在 Chrome 中运行良好。

这是我的代码::

static downloadFile(fileName: string, fileMimeType: string, uri: string) {
const dataURI = uri;
const blob = this.dataURIToBlob(dataURI);
const url = URL.createObjectURL(blob);
const blobAnchor = document.createElement('a');
const dataURIAnchor = document.createElement('a');
blobAnchor.download = dataURIAnchor.download = fileName;
blobAnchor.href = url;
dataURIAnchor.href = dataURI;

blobAnchor.onclick = function () {
requestAnimationFrame(function () {
URL.revokeObjectURL(url);
});
};

blobAnchor.click();
}

static dataURIToBlob(dataURI) {

const binStr = atob(dataURI.split(',')[1]),
len = binStr.length,
arr = new Uint8Array(len),
mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];

for (let i = 0; i < len; i++) {
arr[i] = binStr.charCodeAt(i);
}

return new Blob([arr], {
type: mimeString
});

}

我正在从 Node.js 获取所有数据并在 Chrome 上正常工作。所以我找不到任何问题,为什么它不能与 Firefox 一起工作。

最佳答案

在 firefox 中,您必须将 a 附加到 DOM 中,然后执行单击。

使用 document.body.appendChild(blobAnchor); 附加到 DOM 中。

添加了 blobAnchor.className = 'hidden'; 因此它不会可见。

并在几秒后使用 setTimeout(() => blobAnchor.remove(), 300); 从 DOM 中移除。

static downloadFile(fileName: string, fileMimeType: string, uri: string) {
const dataURI = uri;
const blob = this.dataURIToBlob(dataURI);
const url = URL.createObjectURL(blob);
const blobAnchor = document.createElement('a');
const dataURIAnchor = document.createElement('a');
blobAnchor.download = dataURIAnchor.download = fileName;
blobAnchor.className = 'hidden';
blobAnchor.href = url;
dataURIAnchor.href = dataURI;
document.body.appendChild(blobAnchor);

blobAnchor.onclick = function () {
requestAnimationFrame(function () {
URL.revokeObjectURL(url);
setTimeout(() => blobAnchor.remove(), 300);
});
};

blobAnchor.click();
}

static dataURIToBlob(dataURI) {

const binStr = atob(dataURI.split(',')[1]),
len = binStr.length,
arr = new Uint8Array(len),
mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];

for (let i = 0; i < len; i++) {
arr[i] = binStr.charCodeAt(i);
}

return new Blob([arr], {
type: mimeString
});
}

关于javascript - 使用 Angular 2 和 Node.js 下载不支持 Firefox 的 PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53098674/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com