1 回答
TA贡献1806条经验 获得超5个赞
我通过从filesDownloadto切换解决了这个问题filesGetTemporaryLink,它返回一个文件链接而不是文件本身。然后我触发下载此链接。
最终结果:
operationResult = await dbx.filesGetTemporaryLink({
path: `/${CONFIG_STORAGE.uploader.assetsPath}/${fileUUID}`
});
const downloadResult = Object.freeze({
fileLength: operationResult?.metadata.size,
fileLink: operationResult?.link,
fileMIME: mime.lookup(operationResult?.metadata.name),
fileName: operationResult?.metadata.name,
isSucceeded,
message
});
return downloadResult;
然后我将输出发送给客户端:
res.json(downloadResult);
在客户端,我通过await/ asyncFetch API 调用获得它:
const fileResponse = await fetch(``${host}/downloadDocument`, {
body: JSON.stringify({fileUUID: fileName}),
cache: "no-cache",
credentials: "same-origin",
headers: {
"Content-Type": "application/json"
},
method: "POST",
mode: "cors"
});
const fileData = await fileResponse.json();
const aTag = document.createElement("a");
aTag.href = fileData.fileLink;
aTag.download = fileData.fileName;
aTag.click();
因此,服务器根本不需要处理文件,没有额外的 CPU、RAM 或流量影响,无论我尝试下载多大的文件。
添加回答
举报