Gan*_*sle 6 browser content-type amazon-s3 content-disposition amazon-web-services
几行(以下)生成签名 URL,浏览器重定向到该 URL 以从 S3 下载文件。
当内容类型设置为八位字节流时,我面临着众所周知的 Chrome 无法从 S3 下载 pdf 文件的问题。
解决方案是强制 chrome 下载文件,而不是尝试读取/打开它。
我尝试添加 'response-content-disposition' 来签名以及 URL,但它没有用。
生成 url 时如何使用“响应内容处置”标头?
String codedFilename= EncodingUtil.urlEncode(bucketPath,'UTF-8');
String stringtosign = 'GET\n\n\n'+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;
Run Code Online (Sandbox Code Playgroud)
注意:- 这是 salesforce-apex 语法。
String codedFilename= EncodingUtil.urlEncode(bucketPath,'UTF-8');
String stringtosign = 'GET\n\n\n'+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;
Run Code Online (Sandbox Code Playgroud)
如果文档的内容类型为“应用程序/八位字节流”(本例中为 pdf int),Chrome 会出现问题。但是,如果内容类型为“二进制/八位字节流”,则 chrome 是可以的。
幸运的是,如果在上传时未设置任何内容,S3 会将下载的内容类型默认为“二进制/八位字节流”。
我的建议:- 如果需要在上传时不知道内容类型的情况下将“任何”类型的文件传输到 S3,只需不要设置它或将其设置为“二进制/八位字节流”。这样 Chrome 将显示警告但文件已下载。
| 归档时间: |
|
| 查看次数: |
15816 次 |
| 最近记录: |