【问题标题】:ContentDisposition meta data property is not added to the S3 files using AWS-SDKContentDisposition 元数据属性未使用 AWS-SDK 添加到 S3 文件中
【发布时间】:2019-08-16 19:45:00
【问题描述】:

在我的应用程序中,我使用 S3 来存储文件。但是在检索这些文件时,它们会在新选项卡中打开。但是,我想下载这些文件。根据一些参考资料和 AWS 文档,我知道我们可以使用 ContentDisposition 元数据参数来实现这一点。我做了如下:

s3.copyObject({
   CopySource: object.bucket + '/' + object.key,
   Bucket: BUCKET,
   Key: object.destKey,
   ContentDisposition: 'attachment; filename=some_file_name.jpg'
})

当我执行上述操作时,不会添加 ContentDisposition 元数据参数(我在 AWS S3 控制台中进行了检查)。我不确定我在哪里做错了。请帮我解决这个问题。

谢谢...

【问题讨论】:

    标签: amazon-web-services amazon-s3 aws-lambda aws-sdk


    【解决方案1】:

    RFC-6266 似乎指定文件名是带引号的字符串。

    ContentDisposition: 'attachment; filename="some_file_name.jpg"'
    

    【讨论】:

      【解决方案2】:

      我遇到了类似的问题,但使用的是AWS SDK for JavaScript v3。看来如果你使用Copy command,并且想要设置ContentDisposition标头,还必须将MetadataDirective(对应x-amz-metadata-directive标头)设置为“REPLACE”。否则,来自源对象的元数据将被复制,如果其中不包含 ContentDisposition,或者目标对象的元数据不正确,它仍将应用于目标对象。

      new CopyObjectCommand({
          Bucket: bucket,
          CopySource: `${bucket}/${sourceKey}`,
          Key: targetKey,
          MetadataDirective: 'REPLACE',
          ContentDisposition: `attachment; filename="${filename}"`,
      });
      

      【讨论】:

        【解决方案3】:

        我不知道为什么它不起作用。但是,经过大量研究,我遇到了this post。在获取这些对象时,我发送了如下参数

        return s3utils.getSignedUrl({
          filePath: key,
          type: 'getObject',
          "ResponseContentDisposition": 'attachment'
        });
        

        使用ResponseContentDisposition 参数对我有用。但是,仍然不确定为什么 copyObjectContentDisposition 不起作用。

        还有待解决的问题

        谢谢...

        【讨论】:

        • 与复制命令的不同之处在于 getSignedUrl() 将使用这种方法“即时”生成 ContentDisposition。因此,标头不会保存到 S3 以供将来使用。当这是您用于下载对象的方法时,这可能是一个足够的解决方案,但如果您在两者之间使用 CloudFront (CDN),则将不起作用。
        猜你喜欢
        • 2014-04-28
        • 1970-01-01
        • 1970-01-01
        • 2017-01-10
        • 1970-01-01
        • 2021-07-26
        • 1970-01-01
        • 1970-01-01
        • 2019-12-06
        相关资源
        最近更新 更多