P粉0717437322023-08-17 12:50:47
文件扩展名实际上与此并没有太多关系... Content-Type
头部才有关系。
根据您的描述,我猜测当获取PDF文件时,服务器在响应中没有使用正确的类型,而是发送它们作为application/octet-stream
或其他类型。(这是一种通用类型,浏览器默认会下载它们。)
有几种方法可以解决这个问题。一种方法是使用ServiceWorker来根据需要重写Content-Type
头部。不过,这并不总是有效的。当页面被强制重新加载或启用隐私模式时,浏览器经常会禁用Service Worker。
另一种更接近您提议的方法是在JavaScript中以内存方式获取PDF。您可以使用Fetch API来实现这一点,然后创建一个Blob URL,并让浏览器下载它。尚未经过测试,但大致如下:
const res = await fetch('https://example.com/doc.pdf.fake-ext'); if (!res.ok) { throw new Error(`${res.status} ${res.statusText}`); } const blob = await res.blob(); const blobUrl = URL.createObjectURL(blob); // 现在,您可以直接链接或重定向到`blobUrl`。 // 完成后一定要释放它,使用URL.revokeObjectURL()。
请注意,这对于特别大的文档可能不起作用。小型文档则没有问题。
还要注意,并非所有浏览器都能显示PDF,也并非所有系统都配置允许浏览器自行显示PDF。