如何删除文件夹中唯一的文件(图像)

时间:2019-04-01 09:17:34

标签: node.js amazon-s3

我想删除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\"}"
}

任何帮助将不胜感激。

2 个答案:

答案 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

这将立即“创建” folder1folder2。但是,如果要删除foo.txt,则这些文件夹将消失。这是因为文件夹实际上不存在,系统只是使它们“看起来存在”。它们被正式称为通用前缀,而不是文件夹。

可以通过创建与文件夹名称相同的零长度对象来创建文件夹。即使文件夹中没有对象,这也会导致文件夹“出现”。但是,总的来说,这不是必需的。几乎没有理由需要一个空文件夹。