Javascript 从aws中删除多个图像
下面是我用于从aws中删除多个图像的代码Javascript 从aws中删除多个图像,javascript,node.js,amazon-web-services,amazon-s3,Javascript,Node.js,Amazon Web Services,Amazon S3,下面是我用于从aws中删除多个图像的代码 AWS.config.update({ accessKeyId: process.env.ACCESS_KEY, secretAccessKey: process.env.SECRET_ACCESS_KEY }) const s3 = new AWS.S3({ params: { Bucket: process.env.BUCKET } }) 这是我从前端传递的用于删除图像的阵列 const array = [ 'http
AWS.config.update({
accessKeyId: process.env.ACCESS_KEY,
secretAccessKey: process.env.SECRET_ACCESS_KEY
})
const s3 = new AWS.S3({
params: {
Bucket: process.env.BUCKET
}
})
这是我从前端传递的用于删除图像的阵列
const array = [
'https://s3.amazonaws.com/lgfit/picture/5b55a7a6c316686bbbbc8120.jpg',
'https://s3.amazonaws.com/lgfit/picture/5b4c3ca0097c915e38d0d21515-09-2018_12_13_48.jpg'
]
这里我在aws的deleteObject
中传递图像
var options = {
Bucket: process.env.BUCKET,
Delete: {
Objects: [{
Key: array
}],
}
}
return new Bluebird((resolve) => {
s3.deleteObject(options, function (err,data){
console.log(err)
console.log(data)
})
})
我得到了以下错误
{ MultipleValidationErrors: There were 2 validation errors:
* MissingRequiredParameter: Missing required key 'Key' in params
* UnexpectedParameter: Unexpected key 'Delete' found in params
at ParamValidator.validate (/home/user/ashish/FitnessApp/Fitness-New-one/fitnessapp-backend/node_modules/aws-sdk/lib/param_validator.js:40:28)
at Request.VALIDATE_PARAMETERS (/home/user/ashish/FitnessApp/Fitness-New-one/fitnessapp-backend/node_modules/aws-sdk/lib/event_listeners.js:108:42
请帮助我在这里做错了什么 由于您试图使用单个HTTP请求删除多个对象,因此应该使用s3.deleteObjects()而不是s3.deleteObject()。您可以尝试以下操作:
var options = {
Bucket: process.env.BUCKET,
Delete: {
Objects: [{
Key: array[0]
},
{
Key: array[1]
}],
}
}
return new Bluebird((resolve) => {
s3.deleteObjects(options, function (err,data){
console.log(err)
console.log(data)
})
})
由于您试图使用单个HTTP请求删除多个对象,因此应该使用s3.deleteObjects()而不是s3.deleteObject()。您可以尝试以下操作:
var options = {
Bucket: process.env.BUCKET,
Delete: {
Objects: [{
Key: array[0]
},
{
Key: array[1]
}],
}
}
return new Bluebird((resolve) => {
s3.deleteObjects(options, function (err,data){
console.log(err)
console.log(data)
})
})
代码中有两个错误
deleteObjects
是删除多个对象的方法
及
Delete.Objects
expectkey:string
但是您正在给key:array
所以您需要从数组生成对象。我假设lgfit
就是你的桶
const params = {
Bucket: process.env.BUCKET,
Delete: {
Objects: [{
Key: "picture/5b55a7a6c316686bbbbc8120.jpg"
},
{
Key: "picture/5b4c3ca0097c915e38d0d21515-09-2018_12_13_48.jpg"
}
],
Quiet: false
}
};
return new Bluebird((resolve) => {
s3.deleteObjects(params, function (err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
/*
data = {
Deleted: [
{
DeleteMarker: true,
DeleteMarkerVersionId: "A._w1z6EFiCF5uhtQMDal9JDkID9tQ7F",
Key: "objectkey1"
},
{
DeleteMarker: true,
DeleteMarkerVersionId: "iOd_ORxhkKe_e8G8_oSGxt2PjsCZKlkt",
Key: "objectkey2"
}
]
}
*/
});
});
代码中有两个错误
deleteObjects
是删除多个对象的方法
及
Delete.Objects
expectkey:string
但是您正在给key:array
所以您需要从数组生成对象。我假设lgfit
就是你的桶
const params = {
Bucket: process.env.BUCKET,
Delete: {
Objects: [{
Key: "picture/5b55a7a6c316686bbbbc8120.jpg"
},
{
Key: "picture/5b4c3ca0097c915e38d0d21515-09-2018_12_13_48.jpg"
}
],
Quiet: false
}
};
return new Bluebird((resolve) => {
s3.deleteObjects(params, function (err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
/*
data = {
Deleted: [
{
DeleteMarker: true,
DeleteMarkerVersionId: "A._w1z6EFiCF5uhtQMDal9JDkID9tQ7F",
Key: "objectkey1"
},
{
DeleteMarker: true,
DeleteMarkerVersionId: "iOd_ORxhkKe_e8G8_oSGxt2PjsCZKlkt",
Key: "objectkey2"
}
]
}
*/
});
});
将数组更改为对象
const imgList = [
{Key: 'picture/5b55a7a6c316686bbbbc8120.jpg'},
{Key: 'picture/5b4c3ca0097c915e38d0d21515-09-2018_12_13_48.jpg'}
]
将数组设置为参数中的对象值
const params = {
Bucket: process.env.BUCKET,
Delete: {
Objects: imgList,
Quiet: false
}
};
return new Bluebird((resolve) => {
s3.deleteObjects(params, function (err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
});
});
现在删除对象
const params = {
Bucket: process.env.BUCKET,
Delete: {
Objects: imgList,
Quiet: false
}
};
return new Bluebird((resolve) => {
s3.deleteObjects(params, function (err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
});
});
将数组更改为对象
const imgList = [
{Key: 'picture/5b55a7a6c316686bbbbc8120.jpg'},
{Key: 'picture/5b4c3ca0097c915e38d0d21515-09-2018_12_13_48.jpg'}
]
将数组设置为参数中的对象值
const params = {
Bucket: process.env.BUCKET,
Delete: {
Objects: imgList,
Quiet: false
}
};
return new Bluebird((resolve) => {
s3.deleteObjects(params, function (err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
});
});
现在删除对象
const params = {
Bucket: process.env.BUCKET,
Delete: {
Objects: imgList,
Quiet: false
}
};
return new Bluebird((resolve) => {
s3.deleteObjects(params, function (err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
});
});
现在得到这个
InvalidParameterType:应该是params.Delete.Objects[0]。键应该是字符串
我认为现在的问题是,您提供的键是一个数组,其中键应该是字符串,而对象应该是一个数组,数组中有多个键作为位置图像对象。看看这里:有趣的是,s3.deleteObject()和s3.deleteObjects()之间的细微差别让我即使在梦中也能思考。我太傻了,谢谢@AshishNow收到这个InvalidParameterType:需要参数。Delete.Objects[0]。键是字符串
我想现在的问题是你提供的键是一个数组,其中键应该是字符串,对象应该是一个数组,数组中有多个键作为位置图像对象。看看这里:有趣的是,s3.deleteObject()和s3.deleteObjects()之间的细微差别让我即使在梦中也能思考。我真傻,谢谢你@ashishThank!!!它工作完美!!!所以我需要从图像中删除前缀?是的,因为您已经提供了bucket name,所以您需要给出该bucket根的相对路径。这里什么是Quiet:false
?多对象删除操作支持两种响应模式;冗长而安静。默认情况下,该操作使用详细模式,其中响应包括删除请求中每个键的结果。在安静模式下,响应仅包括删除操作遇到错误的键。如果删除成功,操作不会在响应正文中返回任何有关删除的信息。谢谢!!!它工作完美!!!所以我需要从图像中删除前缀?是的,因为您已经提供了bucket name,所以您需要给出该bucket根的相对路径。这里什么是Quiet:false
?多对象删除操作支持两种响应模式;冗长而安静。默认情况下,该操作使用详细模式,其中响应包括删除请求中每个键的结果。在安静模式下,响应仅包括删除操作遇到错误的键。对于成功的删除,操作不会在响应正文中返回有关删除的任何信息。