How can I delete folder on s3 with node.js?
amazon-s3, amazon-web-services, node.js
Solution
You can use aws-sdk module for deleting folder. Because you can only delete a folder when it is empty, you should first delete the files in it. I'm doing it like this :
function emptyBucket(bucketName,callback){
var params = {
Bucket: bucketName,
Prefix: 'folder/'
};
s3.listObjects(params, function(err, data) {
if (err) return callback(err);
if (data.Contents.length == 0) callback();
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) return callback(err);
if (data.IsTruncated) {
emptyBucket(bucketName, callback);
} else {
callback();
}
});
});
}
Problem
Yes, I know. There is no folder concept on s3 storage. but I really want to delete a specific folder from s3 with node.js. I tried two solutions, but both didn't work. My code is below: Solution 1: Deleting folder directly. ``` var key='level/folder1/folder2/'; var strReturn; var params = {Bucket: MyBucket}; var s3 = new AWS.S3(params); s3.client.listObjects({ Bucket: MyBucket, Key: key }, function (err, data) { if(err){ strReturn="{\"status\":\"1\"}"; }else{ strReturn=+"{\"status\":\"0\"}"; } res.send(returnJson); console.log('error:'+err+' data:'+JSON.stringify(data)); }); ``` Actually, I have a lot of files under folder2. I can delete single file from folder2 if I define key like this: var key='level/folder1/folder2/file1.txt', but it didn't work when I deleted a folder(key='level/folder1/folder2/'). Solution 2: I tried to set expiration to an object when I uploaded this file or folder to s3. code is below: ``` s3.client.putObject({ Bucket: Camera_Bucket, Key: key, ACL:'public-read', Expires: 60 } ``` But it didn't either. After finishing uploading, I checked the properties of that file. it showed there was nothing value for expiry date: ``` Expiry Date:none Expiration Rule:N/A ``` How can I delete folder on s3 with node.js?