我想将文件部分上传到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进行分段上传。
答案 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并不清楚且易于理解,如果您想通过分段上传提供备用元数据,则必须采用这种方式。
我希望这会有所帮助。