如何使用javascript更新s3中现有对象的元数据?

时间:2018-02-20 23:08:31

标签: javascript amazon-web-services amazon-s3 aws-sdk aws-sdk-nodejs

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

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

我成功请求预先签名的网址

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);
    }
});
        
        
        
        

然后成功向签名网址发送PUT请求。

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

但是当我转到s3控制台时,我发现我的视频文件已被删除,元数据已更新。我究竟做错了什么? 谢谢。

1 个答案:

答案 0 :(得分:2)

我刚想通了....当我将PUT请求发送到我预先签名的网址时,我添加了一个' x-amz-copy-source'标题,它的工作原理!我的元数据已更新,我的原始文件不会被覆盖和删除。 我使用了here中的文档。

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



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