在保留原始文件名的 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);
  }