AWS S3:使用'响应强制文件下载

几行(下面)生成签名的URL,浏览器被重定向到S3下载文件。

当内容类型被设置为Octet Stream时,我正面临着着名的Chrome问题,而不是从S3下载pdf文件。

解决方案是强制chrome下载文件,而不是尝试读取/打开它。

我尝试添加'response-content-disposition'来签名以及URL,但它不起作用。

如何在生成url时使用'response-content-disposition'标题?

    String codedFilename=  EncodingUtil.urlEncode(bucketPath,'UTF-8');

    String stringtosign = 'GETnnn'+Lexpires+'n/'+bucketName+'/'+codedFilename;

    String signed = make_sig(stringtosign); 

    String codedsigned = EncodingUtil.urlEncode(signed,'UTF-8');

    String url = serverURL+'/'+bucketName+'/'+codedFilename+'?AWSAccessKeyId='+awskey+'&Expires='+Lexpires+'&Signature='+codedsigned;

注意: - 这是salesforce-apex语法。


    String codedFilename=  EncodingUtil.urlEncode(bucketPath,'UTF-8');

    String stringtosign = 'GETnnn'+Lexpires+'n/'+bucketName+'/'+codedFilename+'?response-content-disposition=attachment; filename=abc.doc';

    String signed = make_sig(stringtosign); 

    String codedsigned = EncodingUtil.urlEncode(signed,'UTF-8');

    String url = serverURL+'/'+bucketName+'/'+codedFilename+'?response-content-disposition='+EncodingUtil.urlEncode('attachment; filename=abc.doc','UTF-8')+'&AWSAccessKeyId='+awskey+'&Expires='+Lexpires+'&Signature='+codedsigned;

来源:无法覆盖s3中的内容处置标题

如果内容类型是文档的“application / octet-stream”,Chrome会出现问题(本例中为pdf int)。 但是,如果内容类型是'binary / octet-stream',那么chrome是OK的。

谢天谢地S3默认的内容类型下载到'binary / Octet-stream'如果nothig是在上传时设置的。

我的建议: - 如果需要在上传时不知道内容类型的情况下向S3提供“任何”类型的文件,则不要设置它或将其设置为“binary / Octet-stream”。 这种方式Chrome会显示警告,但文件已下载。


这里是一些Ruby代码,它签署了一个S3 url并设置了response-content-disposition。 这可以强制Chrome下载PDF而不是将其内联呈现。

https://gist.github.com/diamondap/9134867

链接地址: http://www.djcxy.com/p/46265.html

上一篇: AWS S3: Force File Download using 'response

下一篇: stream coming from XMLHttpRequest