很少的几行(下面)生成签名的URL,浏览器重定向到该URL以从S3下载文件。
当内容类型设置为八位位流时,我面临着一个众所周知的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语法。
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;
如果文档的内容类型为“应用程序/八位字节流”,则Chrome会出现问题(在这种情况下为pdf)。但是,如果内容类型为“二进制/八位字节流”,则可以使用chrome。
幸运的是,如果在上载时未设置nothig,S3会将下载的Content-Type默认设置为“ binary / Octet-stream”。
我的建议:-如果需要在上载时不知道内容类型的情况下将“任何”类型的文件发送到S3,只需不要设置它或将其设置为“二进制/八位流”。这样,Chrome会显示警告,但文件已下载。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句