微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在ReactJS应用中下载文件并保留原始文件名

如何解决在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 举报,一经查实,本站将立刻删除。