[英]Get version ID of uploaded S3 file right after upload?
我正在处理不可避免的问题,即用户能够通过 JavaScript S3 上传覆盖我存储桶中的文件。
上传文件后,假设我启用了版本控制,有没有办法获取原始版本 ID,以便我可以将其存储在我的数据库中,以便稍后在显示该文件时检索?
这是我当前的上传代码:
s3.upload(params).on('httpUploadProgress', function(evt) {
var uploaded = Math.round(evt.loaded / evt.total * 100);
console.log(`File uploaded: ${uploaded}%`);
}).send(function(err, data) {
if(err){
alert(err);
} else {
alert('File is uploaded successfully!');
console.log(data);
}
});
我在数据响应中没有看到任何版本 ID,因为它似乎在响应标头中。 有没有办法从那里提取它?
你是对的; 您的代码无权访问以前/原始的versionId.
我不知道您的确切要求,但我看到了两种方法:
在使用返回data.VersionId
的s3.headObject upload
之前检查文件元数据。 如果文件不存在,也没关系; 否则,您可以将原始版本 ID 保存在数据库中。
根本不要将版本保存在数据库中,并在文件从 S3 显示时使用listObjectVersions获取它们。
我能够使用以下代码在上传后立即检索原始版本 ID(它上传图像,然后在使用 listObjectVersions 后立即获取版本):
s3.upload(params).on('httpUploadProgress', function(evt) {
var uploaded = Math.round(evt.loaded / evt.total * 100);
console.log(`File uploaded: ${uploaded}%`);
}).send(function(err, data) {
if(err){
alert(err);
} else {
alert('File is uploaded successfully!');
console.log(data);
var params = {
Bucket: "mybucket",
Prefix: "images/path-to-image.jpg"
};
s3.listObjectVersions(params, function(err, data) {
var versionId = data["Versions"][0]["VersionId"];
alert(versionId);
});
}
});
请务必在您的存储桶策略中启用列表 object 版本:
{
"Sid": "Statement2",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:ListBucketVersions",
"Resource": "arn:aws:s3:::mybucket"
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.