Kev*_*vin 7 javascript amazon-s3 express aws-sdk
在我正在构建的MEAN.js应用程序中,我将图像上传到AWS S3.我正在尝试使用AWS SDK从站点中删除不需要的图像,但在成功调用ajax后,该文件仍保留在S3上.
我已经像这样需要AWS SDK,它可以使用和不使用配置变量(因为它应该):
var aws = require('aws-sdk');
aws.config.update({accessKeyId: process.env.AWS_ACCESS_KEY_ID, secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY});
Run Code Online (Sandbox Code Playgroud)
对于我的路线,我有以下代码:
router.post('/delete', auth, function(req,res, next){
if(req.body.key) {
var s3 = new aws.S3();
var params = {
Bucket: 'bucket name',
Key: req.body.key
};
s3.deleteObject(params, function (err, data) {
if (err) {
console.log(err, err.stack);
return next(err);
}
console.log(data);
res.end('done');
Run Code Online (Sandbox Code Playgroud)
我收到200响应并{}登录到控制台但该文件未从存储中删除.我也尝试过deleteObjects这样的方法:
var params = {
Bucket: 'bucket name',
Delete: {
Objects: [
{
Key: req.body.key
}
]
}
};
s3.deleteObjects(params, function (err, data) {
if (err) {
console.log(err, err.stack);
return next(err);
}
console.log(data);
res.end('done');
Run Code Online (Sandbox Code Playgroud)
当我使用deleteObjects时,我得到{ Deleted: [ { Key: 'file name' } ], Errors: [] }了一个响应,但该文件仍在S3上.
难道我做错了什么?我以为我跟着文件到T.
此外,问题发生在桶上还是没有启用版本控制.启用版本控制后,我的响应是:
{ Deleted:
[ { Key: 'file name',
DeleteMarker: true,
DeleteMarkerVersionId: 'long id' } ],
Errors: [] }
Run Code Online (Sandbox Code Playgroud)
小智 5
试试这个。您需要使用 promise() 来确保在结束执行之前删除对象。即使考虑到 S3 99.999999999% 的持久性,仅仅为一个简单的对象删除而等待 6 个小时也是不正常的。
var params = {
Bucket : bucket,
Key : video
};
try {
await s3.deleteObject(params,function(err,data){
if (err) console.log(err,err.stack);
else console.log("Response:",data);
}).promise();
} catch (e) {}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2812 次 |
| 最近记录: |