Nodejs使用aws-sdk删除Amazon S3上的文件夹

时间:2016-10-17 03:51:54

标签: node.js amazon-web-services amazon-s3

我正面临删除包含Amazon S3上的照片的文件夹的问题

1。创建文件夹

var params = {Bucket: S3_BUCKET, Key: "test/", ACL:"public-read"};  
s3.putObject(params, function(err, data) {  

}); 

2。上传照片

var body = fs.createReadStream(filePath);  
var params = {Bucket: S3_BUCKET, Key: "test/flower.jpgg", Body: body, ContentType:"image/jpeg", ACL:"public-read"};  

s3.upload(params, function(err, data) {

});

3。删除文件夹

var params = {Bucket: S3_BUCKET, Key: "test/"};  
s3.deleteObject(params, function(err, data) {

});

如果文件夹没有照片,删除功能效果很好。但它包含照片,删除将无法正常工作 请帮忙。感谢所有支持。

1 个答案:

答案 0 :(得分:5)

这里的问题是概念问题,从第1步开始。

这不会创建文件夹。它创建一个占位符对象,控制台将显示为文件夹。

  

以尾随" /"命名的对象显示为Amazon S3控制台中的文件夹。

     

http://docs.aws.amazon.com/AmazonS3/latest/UG/FolderOperations.html

没有必要这样做 - 使用此密钥前缀创建对象仍然会导致控制台显示文件夹,即使不创建此对象也是如此。从同一页面:

  

Amazon S3具有扁平结构,没有您在典型文件系统中看到的层次结构。但是,为了简化组织,Amazon S3控制台支持将文件夹概念作为对对象进行分组的方法。 Amazon S3通过使用对象的密钥名称前缀来实现此目的。

由于在步骤1中,您实际上并未创建文件夹,因此删除占位符对象也不会删除该文件夹。

文件夹实际上并不存在于S3中 - 它们仅用于控制台中的显示目的 - 因此无法正确地说对象是"在"文件夹。删除所有对象的唯一方法" in"文件夹是单独显式删除对象。同样,重命名文件夹的唯一方法是重命名文件夹是重命名其中的对象...而重命名对象的唯一方法是使用新密钥复制对象,然后删除旧文件夹对象