更改内容 - 现有S3对象的处置

时间:2010-04-10 15:00:24

标签: amazon-s3 metadata

在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浏览器开始工作?

2 个答案:

答案 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