在S3分段上传中设置元数据

时间:2014-12-05 21:14:42

标签: file-upload amazon-s3 boto

我想将文件部分上传到S3,并在文件上设置一些元数据。我正在使用boto与S3进行交互。我可以使用单操作上传设置元数据,如下所示:

有没有办法通过分段上传设置元数据?我已尝试this method复制密钥以更改元数据,但失败并显示错误:InvalidRequest: The specified copy source is larger than the maximum allowable size for a copy source: <size>

我也尝试过以下操作:

key = bucket.create_key(key_name)
key.set_metadata('some-key', 'value')
<multipart upload>

...但是分段上传会覆盖元数据。

我正在使用代码similar to this进行分段上传。

2 个答案:

答案 0 :(得分:3)

抱歉,我刚刚找到答案:

the docs

  

如果您想提供描述上传对象的任何元数据,您必须在请求中提供它以启动分段上传。

因此,在boto中,可以在initiate_multipart_upload调用中设置元数据。 Docs here.

答案 1 :(得分:2)

今天早些时候面对这样的问题,发现没有关于如何做到这一点的信息。 关于我们如何解决下面提供的问题的代码示例。

        $uploader = new MultipartUploader($client, $source, [
        'bucket' => $bucketName,
        'key' => $filename,
        'before_initiate' => function (\Aws\Command $command) {
            $command['ContentType'] = 'application/octet-stream';
            $command['ContentDisposition'] = 'attachment';
        },
    ]);

不幸的是,文档https://docs.aws.amazon.com/aws-sdk-php/v3/guide/service/s3-multipart-upload.html#customizing-a-multipart-upload并不清楚且易于理解,如果您想通过分段上传提供备用元数据,则必须采用这种方式。

我希望这会有所帮助。