在保留原始文件名的 ReactJS 应用程序中下载文件
Download file in ReactJS app preserving the original filename
我正在使用 nodejs/koa2
提供 pdf 文件
ctx.body = readableStream;
ctx.attachment('file.pdf');
文件成功到达,在客户端我用 ReactJS 应用程序收到它:
const document = useSelector(selectors.getFile(documentFile.key));
if (document) {
window.open(window.URL.createObjectURL(new Blob([document], { type: "application/octet-stream" })), "_self");
}
...
const openFile = useCallback((key) => {
dispatch(actions.getFile.request(key))
}, [dispatch]);
它成功下载了文件,但完全忽略了响应 header Content-Disposition: attachment; filename="file.pdf"
并以取自 BLOB url 的 d3aa7870-bd35-4645-a926-294392343cfc
之类的名称下载它:Request URL: blob:http://localhost:3000/d3aa7870-bd35-4645-a926-294392343cfc
.
请问如何在客户端正确保存到file.pdf
的名字下?
只需创建一个元素并使用文件名设置下载属性
const document = useSelector(selectors.getFile(documentFile.key));
if (document) {
const url =window.URL.createObjectURL(new Blob([document], { type: "application/octet-stream" }))
const a = document.createElement("a");
a.style = "display: none";
document.body.appendChild(a);
a.href = url;
a.download = "fileName";
a.click();
window.URL.revokeObjectURL(url);
}
我正在使用 nodejs/koa2
提供 pdf 文件 ctx.body = readableStream;
ctx.attachment('file.pdf');
文件成功到达,在客户端我用 ReactJS 应用程序收到它:
const document = useSelector(selectors.getFile(documentFile.key));
if (document) {
window.open(window.URL.createObjectURL(new Blob([document], { type: "application/octet-stream" })), "_self");
}
...
const openFile = useCallback((key) => {
dispatch(actions.getFile.request(key))
}, [dispatch]);
它成功下载了文件,但完全忽略了响应 header Content-Disposition: attachment; filename="file.pdf"
并以取自 BLOB url 的 d3aa7870-bd35-4645-a926-294392343cfc
之类的名称下载它:Request URL: blob:http://localhost:3000/d3aa7870-bd35-4645-a926-294392343cfc
.
请问如何在客户端正确保存到file.pdf
的名字下?
只需创建一个元素并使用文件名设置下载属性
const document = useSelector(selectors.getFile(documentFile.key));
if (document) {
const url =window.URL.createObjectURL(new Blob([document], { type: "application/octet-stream" }))
const a = document.createElement("a");
a.style = "display: none";
document.body.appendChild(a);
a.href = url;
a.download = "fileName";
a.click();
window.URL.revokeObjectURL(url);
}