在S3 REST API中,我使用PUT(复制)命令将元数据添加到现有对象,并使用'x-amz-metadata-directive' = 'REPLACE'
我想要做的是通过设置更改下载文件名:
Content-Disposition: attachment; filename=foo.bar;
这会正确设置元数据,但是当我下载文件时,它仍使用密钥名称而不是'foo.bar'
我使用软件工具S3浏览器查看元数据,看起来正确(除了'Content-Disposition'
全是小写,因为那是S3请我签名)
然后使用S3浏览器我刚按下,然后保存而不更改任何东西,现在它可以工作???
我想知道如何从我的网络应用程序设置元数据'Content-Disposition: attachment; filename=foo.bar;'
不起作用,但是从S3浏览器开始工作?
答案 0 :(得分:7)
解决:
Doco在http://docs.amazonwebservices.com/AmazonS3/latest/dev/index.html?RESTAuthentication.html
似乎错了,它说:
注意'x-amz-'标题是如何排序,空格修剪,转换为tolowercase,以及使用逗号分隔值连接多个具有相同名称的标题。
请注意,只有Content-Type和Content-MD5HTTPentity标头出现在StringToSign中。其他内容 - *实体标头不会出现。 但是,必须专门设置Content-Disposition,不包括在内:x-amz-meta-Content-Disposition
现在工作正常。
答案 1 :(得分:1)
这里:这使用cli在存储桶内的路径中的所有文件上设置content-disposition标头(并将它们设置为公共):
aws s3 ls s3://mybucket/brand_img/ios/|awk {'print $4'} > objects.txt
while read line; do aws s3api copy-object --bucket mybucket \
--copy-source /mybucket/brand_img/ios/$line --key brand_img/ios/$line \
--metadata-directive REPLACE --metadata Content-Disposition=$line --acl public-read; done < objects.txt