我想删除Amazon S3中myfolder
文件夹中的文件。
我不想删除文件夹
这是我已经尝试过的代码,但不起作用。
async function deleteFiles(req, res, next) {
const folderName = req.params.imagesFolder;
const s3 = new AWS.S3();
const params = {
Bucket: config.s3bucket,
Delete: {
Objects: [
{
Key: `${folderName}/*`
}
],
},
}
console.log(`Params : ${params}`);
try {
await s3.headObject(params).promise()
console.log("File Found in S3")
try {
await s3.deleteObject(params).promise()
console.log("files deleted Successfully");
next();
}
catch (err) {
console.log("ERROR in file Deleting : " + JSON.stringify(err));
res.status.JSON({success:0, message: `ERROR in file Deleting`, error: JSON.stringify(err)});
}
} catch (err) {
console.log("File not Found ERROR : " + err.code);
res.status(400).json({success:0, message: `File not found`, error: JSON.stringify(err)});
}
}
我收到此控制台错误:
File not Found ERROR : MultipleValidationErrors
但是该文件存在。即使有图像文件3
来自服务器的响应
{
"success": 0,
"message": "File not found",
"error": "{\"message\":\"There were 2 validation errors:\\n* MissingRequiredParameter: Missing required key 'Key' in params\\n* UnexpectedParameter: Unexpected key 'Delete' found in params\",\"code\":\"MultipleValidationErrors\",\"errors\":[{\"message\":\"Missing required key 'Key' in params\",\"code\":\"MissingRequiredParameter\",\"time\":\"2019-04-01T09:04:22.640Z\"},{\"message\":\"Unexpected key 'Delete' found in params\",\"code\":\"UnexpectedParameter\",\"time\":\"2019-04-01T09:04:22.641Z\"}],\"time\":\"2019-04-01T09:04:22.642Z\"}"
}
任何帮助将不胜感激。
答案 0 :(得分:1)
首先,S3存储桶中没有文件夹,它只是文件的前缀。
尝试这样:
var params = {
Bucket: 'bucketName',
Prefix: 'myfolder/'
};
s3.listObjects(params, function(err, data) {
if (err) return console.log(err);
params = {Bucket: bucketName};
params.Delete = {Objects:[]};
data.Contents.forEach(function(content) {
params.Delete.Objects.push({Key: content.Key});
});
s3.deleteObjects(params, function(err, data) {
if (err) console.log(err);
else console.log('well done!');
});
});
答案 1 :(得分:1)
Amazon S3中不存在文件夹。
例如,您可以使用以下键创建对象:
folder1/folder2/foo.txt
这将立即“创建” folder1
和folder2
。但是,如果要删除foo.txt
,则这些文件夹将消失。这是因为文件夹实际上不存在,系统只是使它们“看起来存在”。它们被正式称为通用前缀,而不是文件夹。
您可以通过创建与文件夹名称相同的零长度对象来创建文件夹。即使文件夹中没有对象,这也会导致文件夹“出现”。但是,总的来说,这不是必需的。几乎没有理由需要一个空文件夹。