代码之家  ›  专栏  ›  技术社区  ›  Daveo

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

  •  9
  • Daveo  · 技术社区  · 14 年前

    在s3 rest api中,我使用put(copy)命令向现有对象添加元数据,并使用 '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 回复  |  直到 7 年前
        1
  •  7
  •   Daveo    14 年前

    解决了的:

    文件在 http://docs.amazonwebservices.com/AmazonS3/latest/dev/index.html?RESTAuthentication.html

    好像是错的,上面写着:

    请注意,“x-amz-”头是如何排序的、空格是如何修剪的、转换为Lowercase的,以及多个同名头是如何使用逗号分隔值联接的。

    请注意,只有内容类型和content-md5httpentity头才会出现在stringtosign中。其他内容-*实体头不会出现。 但是,必须具体设置内容处置,而不包括为:x-amz-meta-content-disposition

    它现在工作得很好。

        2
  •  1
  •   FuzzyAmi    7 年前

    这里:这将使用cli在bucket内的路径中的所有文件上设置Content Disposition头(也将其设置为public):

    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