Удалить несколько изображений из AWS - PullRequest
0 голосов
/ 17 сентября 2018

Вот код, который я использую для удаления нескольких изображений из 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 = [
  'https://s3.amazonaws.com/lgfit/picture/5b55a7a6c316686bbbbc8120.jpg',
  'https://s3.amazonaws.com/lgfit/picture/5b4c3ca0097c915e38d0d21515-09-2018_12_13_48.jpg'
]

Здесь я передаю изображения в deleteObject из aws

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

Пожалуйста, помогите, что я делаю здесь неправильно !!!

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

В вашем коде есть две ошибки.

  1. Вы используете неправильный метод SDK.
  2. Вы передаете параметры в неправильном формате.

deleteObjects - метод удаления нескольких объектов а также Delete.Objects ожидайте key: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"
        }
        ]
        }
        */
    });
});
0 голосов
/ 17 сентября 2018

Поскольку вы пытаетесь удалить несколько объектов, используя один 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)
  })
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...