node.js - 使用 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 {}'
有什么想法吗?
解决方案
请确保您的密钥(文件名)中没有任何空格,否则它将不起作用。当我看到我试图删除的文件名中有一个空格时,我遇到了类似的问题。
举个例子,如果我们尝试上传一个名为“new file.jpeg”的文件,那么 DigitalOcean 空间会将其保存为“new\20%file.jpeg”,当您尝试删除此文件时,它找不到任何名称为“new file.jpeg”的文件。这就是为什么我们需要修剪文件名中单词之间的任何空格或空格。
希望能帮助到你。
推荐阅读
- javascript - For 循环什么都不返回 React JS
- python - 在 url python 中获取 / 之后的最后一个单词
- python - 无论如何,return 语句是否可以包含 if、elif 条件句,最后没有 else ?
- android - 在Android中动态获取过去1年的月份列表
- regex - 以指定方式包含字母和空格的正则表达式
- angular - 使用 Jest 和 Angular Cli 对 Ag Grid 的列标题进行单元测试。无法从 columnDefs 中找到所有列
- haskell - 我已经安装了 Yampa,但我未能导入 FRP.Yampa (Mac OS Catalina)
- javascript - 如何处理需要访问 React 中组件的渲染输出的变量?
- ruby-on-rails - Rails - 应该在控制器或视图中设置链接文本吗?
- c# - 为什么我无法打开从网上下载的 excel 文件?