我尝试使用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控制台时,我发现我的视频文件已被删除,元数据已更新。我究竟做错了什么? 谢谢。
答案 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}`
}
});