0

我尝试使用 copyObject 方法来更新我的视频中的元数据。我的视频文件最终被删除,我的元数据也被更新了。为什么我的文件被删除了?

我在下面附上了一些代码片段:

我成功请求了预签名的 url

let params = {
    Bucket: bucketName,
    Key: filePath,
    Expires: this.expiration,
    CopySource: `${bucketName}/${filePath}/`,
    Metadata: req.body.metadata,
    MetadataDirective: 'REPLACE'
};      
      
      
 this.s3.getSignedUrl('copyObject', params, (err, data) => {
    if (err) {
        console.log('err', err);
        res.status(400).send(err);
    } else {
        res.status(200).send(data);
    }
});
        
        
        
        

然后成功向签名的 url 发送 PUT 请求。

let response: any = await this.$http({
    url: signedUrl,
    method: 'PUT'
});

但是当我进入 s3 控制台时,我看到我的视频文件已被删除并且元数据已被更新。我究竟做错了什么?谢谢你。

4

1 回答 1

3

我刚刚想通了....当我将 PUT 请求发送到我的预签名 url 时,我添加了一个“x-amz-copy-source”标头,它就可以工作了!我的元数据已更新,我的原始文件不会被覆盖和删除。我使用了这里的文档。

所以我的 PUT 请求现在看起来像

let response: any = await this.$http({
    url: signedUrl,
    method: 'PUT',
    headers: {
        'x-amz-copy-source': `/${bucketName}/${key}` 
    }
});

于 2018-02-20T23:33:36.083 回答