如何解决在ReactJS应用中下载文件并保留原始文件名
我正在使用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]);
它成功下载了文件,但完全忽略了响应标头Content-disposition: attachment; filename="file.pdf"
,并以d3aa7870-bd35-4645-a926-294392343cfc
之类的名称下载了它,该名称取自BLOB url: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);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。