我从 API 收到一个 Blob 格式的 PDF,我想在新选项卡中打开它,并为其指定一个我想要的文件名。
文件正在新选项卡中打开,但名称和链接如下所示
链接:“blob:http://localhost:3000/6ff6920c-2737-49cb-9359-e641e4af765d”
PDF 名称:“6ff6920c-2737-49cb-9359-e641e4af765d”
每次打开时这个名字都不一样
我正在使用
createObjectURL
打开新标签
const fileUrl = URL.createObjectURL(blob)
window.open(fileUrl);
所以,我想在新选项卡中打开文件时更改文件名,而不是自动生成文件名。
目前看来这是不可能的,至少不能通过将名称嵌入数据 URL/URI 中实现。
我今天遇到了同样的问题,做了一些研究,并得出了这个结论。数据 URL/URI 的媒体类型部分(即 RFC 2397 定义的
data:[<media_type>],<data>
形式的字符串)实际上允许附加参数;例如,data:application/pdf;name=myPDFfile.pdf;base64,...
。这样的参数似乎没有标准化,而且最常见的浏览器也不支持它。
download
属性,可用于实现此目的;另请参阅本质上是同一问题的答案。
问题的解决方法是
var file = new Blob([data], { type: 'application/pdf' });
var fileURL = URL.createObjectURL(file);
const newWindow:any = window.open()
newWindow.document.write(`<title>Pdf Reader</title><iframe src="${fileURL}" frameborder="0" style="border:0; top:0px; left:0px; bottom:0px; right:0px; width:100%; height:100%;" allowfullscreen></iframe>`)