首页 > 解决方案 > 使用 Next (NodeJs) 从 Digital Ocean Space 中删除文件

问题描述

我在尝试从 digitaloceanspace 上的 S3 存储桶中删除文件时遇到了奇怪的行为。我使用 aws-sdk 并遵循官方示例。但是,该方法不会删除文件,不会发生错误,并且返回的数据对象(应该是已删除项的键)为空。代码下方:

import AWS from "aws-sdk";

export default async function handler(req, res){

  const key = req.query.key
  const spacesEndpoint = new AWS.Endpoint("ams3.digitaloceanspaces.com");
  const s3 = new AWS.S3({
      endpoint: spacesEndpoint,
      secretAccessKey: process.env.AWS_SECRET_KEY,
      accessKeyId: process.env.AWS_ACCESS_KEY,
  });

  const params = {
      Bucket: process.env.BUCKET_NAME,
      Key: key,
  };

  s3.deleteObject(params, function (error, data) {
      if (error) {
          res.status({ error: "Something went wrong" });
      }
      console.log("Successfully deleted file", data);
  });
}

环境变量是正确的,其他(上面没有提到的)上传文件方法工作得很好。

传递给参数的密钥格式为“folder/file.ext”,并且肯定存在。

回调返回的是 log: 'Successfully deleted file {}'

有什么想法吗?

标签: node.jsamazon-s3next.jsdigital-ocean

解决方案


请确保您的密钥(文件名)中没有任何空格,否则它将不起作用。当我看到我试图删除的文件名中有一个空格时,我遇到了类似的问题。

举个例子,如果我们尝试上传一个名为“new file.jpeg”的文件,那么 DigitalOcean 空间会将其保存为“new\20%file.jpeg”,当您尝试删除此文件时,它找不到任何名称为“new file.jpeg”的文件。这就是为什么我们需要修剪文件名中单词之间的任何空格或空格。

希望能帮助到你。


推荐阅读