【发布时间】:2019-05-02 01:22:16
【问题描述】:
在我的 Vue 应用程序中,我收到一个作为 blob 的 PDF,并希望使用浏览器的 PDF 查看器显示它。
我将其转换为文件,并生成一个对象 url:
const blobFile = new File([blob], `my-file-name.pdf`, { type: 'application/pdf' })
this.invoiceUrl = window.URL.createObjectURL(blobFile)
然后我通过将该 URL 设置为对象元素的 data 属性来显示它。
<object
:data="invoiceUrl"
type="application/pdf"
width="100%"
style="height: 100vh;">
</object>
然后浏览器使用 PDF 查看器显示 PDF。但是,在 Chrome 中,不使用我提供的文件名(此处为 my-file-name.pdf):我在 PDF 查看器的标题栏中看到一个哈希,当我使用“右键单击”下载文件时-> Save as...' 或查看器的控件,它使用 blob 的哈希(cda675a6-10af-42f3-aa68-8795aa8c377d 或类似)保存文件。
查看器和文件名的工作方式与我在 Firefox 中所希望的一样;只有 Chrome 没有使用文件名。
有什么方法可以使用原生 Javascript(包括 ES6,但除了 Vue 之外没有第三方依赖),在 Chrome 中设置 blob / object 元素的文件名?
[编辑] 如果有帮助,响应具有以下相关标头:
Content-Type: application/pdf; charset=utf-8
Transfer-Encoding: chunked
Content-Disposition: attachment; filename*=utf-8''Invoice%2016246.pdf;
Content-Description: File Transfer
Content-Encoding: gzip
【问题讨论】:
-
您是否通过来自特定服务器的 HTTP 请求接收 PDF?
-
是的,来自我自己的服务器,通过 GET 请求。
-
你能在这里添加如何,你正在获取文件吗?您是否尝试更改
Content-Disposition: inline;?
标签: javascript google-chrome pdf ecmascript-6 blob