很少行(下面)生成签名的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 = '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;
注意: - 这是salesforce-apex语法 .
2 回答
资料来源:Unable to override content disposition header in s3
如果内容类型是文档的“application / octet-stream”,则Chrome会出现问题(本例为pdf) . 但是,如果内容类型是'binary / octet-stream',则chrome是可以的 .
值得庆幸的是,如果在上传时设置了nothig,则S3默认将Content-Type下载为'binary / Octet-stream' .
我的建议: - 如果在上传时不知道内容类型需要S3的“任何”类型的文件,只需不要设置它或将其设置为'binary / Octet-stream' . 这样Chrome就会显示警告,但会下载文件 .
这是一些签署S3 url并设置response-content-disposition的Ruby代码 . 这有助于Chrome下载PDF而不是内联呈现 .
https://gist.github.com/diamondap/9134867