在Chrome上从S3下载PDF的问题

Ark*_*kan 6 content-type google-chrome download amazon-s3

我正面临使用Chrome从Amazon S3下载PDF文件的问题.

当我单击链接时,我的控制器将请求重定向到S3上的文件URL.

它与Firefox完美配合,但Chrome没有任何反应.

然而,如果我执行右键单击 - > 保存位置,将下载文件...

甚至将S3 URL复制粘贴到Chrome中也会导致空白屏幕...

以下是curl返回的一些信息:

Date: Wed, 01 Feb 2012 15:34:09 GMT
Last-Modified: Wed, 01 Feb 2012 04:45:24 GMT
Accept-Ranges: bytes
Content-Type: application/x-pdf
Content-Length: 50024
Server: AmazonS3
Run Code Online (Sandbox Code Playgroud)

我的猜测与内容类型的问题有关......但我尝试过的都没有用.

Ste*_*pel 7

PDF文档的规范Internet媒体类型实际上application/pdf是在application/pdf Media Type(RFC 3778)中定义的 - 请注意application/x-pdf,虽然通常遇到并列为可移植文档格式的媒体类型,但显然不存在互联网号码分配机构(IANA)列出的官方应用媒体类型.

我不知道为什么以及何时application/x-pdf复活,但显然Chrome PDF插件目前还没有打开application/x-pdf文档.

因此,您应该能够通过相应地更改存储对象的媒体类型来触发Chrome中的不同行为.

备选方案(用于经过身份验证

另一种方法是强制下载PDF而不是让Chrome尝试打开它,这可以通过触发请求的Content-Diposition: attachment标题来完成GET- 请参阅有关如何通过请求参数实现此目的的GET对象的S3文档response-content-disposition,特别response-content-disposition=attachment是在参数变更响应标题值的样本请求部分中进行了演示.

这仅适用于经过身份验证的请求,请参阅请求参数部分:

注意

使用这些参数时,您必须使用Authorization标头或预签名URL对请求进行签名.它们不能与未签名(匿名)请求一起使用.

  • @Kerry:你可能意味着替代方法,对吗?不幸的是,这确实只适用于经过身份验证的请求; 我现在用[GET对象]的S3文档(http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTObjectGET.html)中的相应引用更新了我的答案,很抱歉这里有误导性. (2认同)

Ins*_*DHD 7

有一个基于HTML的解决方案.由于chrome是最新的HTML5,我们可以使用闪亮的新download属性!

<a href="http://www.domain.com/painful.pdf">Broken</a>
<a href="http://www.domain.com/painful.pdf" download="notsopainful">Works</a>