Привет, ребята, я пытался удалить папку из s3 с содержимым, но deleteObjects не работал, поэтому я нашел этот скрипт в сети, и он отлично работает. Мой вопрос: почему он работает?Почему вы должны listObjects при удалении папки на s3, почему я не могу просто передать ему имя объекта?Почему не возникает ошибка, когда я пытаюсь удалить папку без предварительного перечисления объектов.
first attempt (doesnt work)
var filePath2 = "templates/" + key + "/test/";
var toPush = { Key: filePath2 };
deleteParams.Delete.Objects.push(toPush);
console.log("deleteParams", deleteParams);
console.log("deleteParams.Delete", deleteParams.Delete);
const deleteResult = await s3.deleteObjects(deleteParams).promise();
console.log("deleteResult", deleteResult);
имейте в виду: folderPath2 - это папка, в которой есть другие элементы, я не получаю ошибки, но все же ловушка нене срабатывает, и он говорит, что удалены и, чем имя папки.
вторая попытка (работает)
async function deleteFromS3(bucket, path) {
const listParams = {
Bucket: bucket,
Prefix: path
};
const listedObjects = await s3.listObjectsV2(listParams).promise();
console.log("listedObjects", listedObjects);
if (listedObjects.Contents.length === 0) return;
const deleteParams = {
Bucket: bucket,
Delete: { Objects: [] }
};
listedObjects.Contents.forEach(({ Key }) => {
deleteParams.Delete.Objects.push({ Key });
});
console.log("deleteParams", deleteParams);
const deleteResult = await s3.deleteObjects(deleteParams).promise();
console.log("deleteResult", deleteResult);
if (listedObjects.IsTruncated && deleteResult)
await deleteFromS3(bucket, path);
}
чем я вызываю функцию вот так
const result = await deleteFromS3(myBucketName, folderPath);