如何强制文件在浏览器中打开而不是下载(PDF)?

ell*_*boa 191 browser embed pdf embedding http-headers

当取消选中"在浏览器中显示PDF"选项时,有没有办法强制PDF文件在浏览器中打开?

我尝试使用embed标签和iframe,但只有在选中该选项时才有效.

我能做什么?

Col*_*inM 381

要向浏览器指示应在浏览器中查看该文件:

Content-Type: application/pdf
Content-Disposition: inline; filename="filename.pdf"
Run Code Online (Sandbox Code Playgroud)

要下载文件而不是查看文件:

Content-Type: application/pdf
Content-Disposition: attachment; filename="filename.pdf"
Run Code Online (Sandbox Code Playgroud)

如果文件名包含特殊字符,则需要文件名周围的引号filename[1].pdf,否则可能会破坏浏览器处理响应的能力.

  • @ PapickG.Taboada然后用户的系统可能不知道文件类型.例如,某些用户可能选择了"始终打开此类文件"的PDF文件.也许如果你想覆盖用户的偏好,那么octet-stream就是你要走的路,但是提供正确的类型和建议的文件名是提供下载的"正确"方式. (25认同)
  • 要强行下载,我宁愿使用Content-Type:application/octet-stream. (11认同)
  • @Kailas我不明白你要做什么..答案是指服务器在响应PDF文件的HTTP请求时应发送给客户端的标头.这些标头对文件上传没有影响,您需要让URL后面的代码在客户端每次下载时设置标头. (3认同)
  • 嗨@ColinM我在这里有点困惑...我们在渲染pdf时遇到问题,它只是给出了一个乱码文本.我们在哪里设置Content-Type:application/pdf Content-Disposition:inline; "filename.pdf"?'cos,我们使用angular-js代码上传它.所以我的问题是在上传之前应该设置内容类型吗?而且,我们只从后端团队获得一个链接,这是一个提供文件路径的URL,我们使用以下命令在新选项卡中打开:window.open(url,'_ _ glank').focus(); (2认同)

Aks*_*hay 20

如果你正在使用HTML5(我想现在每个人都使用它),就会有一个名为的属性download.

例如,

<a href="somepathto.pdf" download="filename">
Run Code Online (Sandbox Code Playgroud)

filename是可选的,但如果提供,则下载文件将使用此名称.

  • 这与OP要求的字面意思相反:) (48认同)
  • 这是一个有趣的旁注 (2认同)
  • 如果您可以控制服务器代码,则应使用“附件”,因为这将允许使用相同的文件名生成代码。如果您无法控制服务器,这是一个很好的解决方案。 (2认同)

Chr*_*ssy 15

正确的类型是application/pdfPDF,而不是application/force-download.这看起来像是一些传统浏览器的黑客攻击.如果可以,请始终使用正确的mimetype.

如果您可以控制服务器代码:

  • 强制下载/提示:使用 header("Content-Disposition", "attachment; filename=myfilename.myextension");
  • 浏览器尝试打开它:使用 header("Content-Disposition", "inline; filename=myfilename.myextension");

无法控制服务器代码:

注意:我更喜欢在服务器端设置文件名,因为您可能有更多信息并且可以使用公共代码.


Kir*_*eck -17

如果您链接到 .PDF,它将在浏览器中打开。
如果未选中该框,它应该链接到 .zip 以强制下载。

如果 .zip 不是一个选项,则使用PHP 中的标头强制下载

header('Content-Type: application/force-download'); 
header('Content-Description: File Transfer'); 
Run Code Online (Sandbox Code Playgroud)

  • 这是错误的。没有应用程序/强制下载。您也可以使用 alskjdsdjk/aljksdlasdj。浏览器将下载,因为它不知道此 mime 类型。正确的下载 mime 类型是 application/octet-stream (26认同)
  • 如果您不强制它下载,那么您就是强制它在浏览器中打开。如果它无法在浏览器中打开,那是因为用户有特定的设置,您无法覆盖该设置,或者他们没有 PDF 阅读软件。 (2认同)