【问题标题】:PDFs in Amazon S3 don't open in Chrome for viewAmazon S3 中的 PDF 无法在 Chrome 中打开以供查看
【发布时间】:2017-02-11 10:31:22
【问题描述】:

我有一个用 PHP 开发并托管在亚马逊服务器上的网站。在服务器中上传的 PDF 文件未在 chrome 浏览器中打开以供查看,但此 pdf 文件正在其他浏览器(Internet Explorer)中打开以供查看。在chrome中它是下载的。我希望打开此 pdf 以供查看。链接代码是

<a href="<?php echo $filename;?>" target="_blank"><?php echo $data['File_Label'];?></a>


网址:Please click here

但下面的文件正在打开以供在 chrome 中查看 Please check this

【问题讨论】:

  • 这个问题与php标签有什么关系?
  • @RiggsFolly,这个问题与 chrome 无关 - 如果内容类型标头未正确设置为 pdf,则任何浏览器都不会以“pdf”格式打开文件。
  • @RiggsFolly,不完全是 - 使用 S3 时 - 在将文件上传到 S3 时设置 mime 类型(如果没有 - 使用默认八位字节流)。您可以在上传时或之后设置正确的 MIME 类型。更新了我的答案,你可以查看。
  • @YugalKishorBais,如何将文件上传到 S3?

标签: google-chrome pdf amazon-s3 amazon-ec2


【解决方案1】:

如果您希望浏览器将文件视为 pdf,您应该让他知道他的文件是 pdf。这样做的方法是发送相关的header:

Content-type: application/pdf

s3 发送的当前标头是:

Content-type: application/octet-stream

由于您将文件上传到 s3 - 您可以在上传期间或之后使用某些 s3 工具(例如用于 windows 的 s3cmd)为文件设置正确的 mime-type。

根据您提供的link to the documentationputObjectFile 函数已弃用,但定义如下:

putObjectFile (string $file, string $bucket, string $uri, [constant $acl = S3::ACL_PRIVATE], [array $metaHeaders = array()], [string $contentType = null])

如您所见 - 最后一个参数是contentType - 因此您可以在上传文件时将其设置为application/pdf
这将在下载时设置正确的标题。

【讨论】:

  • 查看正在使用的锚标记
  • @Dekel PDF 链接在索引页面中创建,它是简单的 html 锚标记。如何为该特定链接添加内容类型。
  • 这与 html 无关 - 标头是服务器正在发送的内容。
  • 现在我更喜欢更好的 UV,而且我也学到了一些关于 S3 的知识,谢谢
  • 希望能从投反对票的人那里知道为什么我对答案投了反对票!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-15
  • 1970-01-01
  • 2012-10-19
  • 1970-01-01
  • 2017-04-16
相关资源
最近更新 更多