Aws S3 удалить объект с помощью JavaScript

Я хочу удалить файл из Amazon S3, используя JavaScript. Я уже загрузил файл на s3, используя JavaScript. любые идеи, пожалуйста, помогите

8 ответов

Вы можете использовать метод js из s3: http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html

var AWS = require('aws-sdk');
AWS.config.loadFromPath('./credentials-ehl.json');
var s3 = new AWS.S3();
var params = {  Bucket: 'your bucket', Key: 'your object' };
s3.deleteObject(params, function(err, data) {
  if (err) console.log(err, err.stack);  // error
  else     console.log();                 // deleted
});

Имейте в виду, что S3 никогда не возвращает его, объект был удален. Вы должны проверить это до или после с помощью getobject, headobject, waitfor и т. Д.

Вы можете использовать конструкцию следующим образом:

var params = {
  Bucket: 'yourBucketName',
  Key: 'fileName'
/* where value for 'Key' equals 'pathName1/pathName2/.../pathNameN/fileName.ext' - full path name to your file without '/' at the beginning */
};
s3.deleteObject(params, function(err, data) {
  if (err) console.log(err, err.stack); // an error occurred
  else     console.log(data);           // successful response
});

И не забудьте обернуть его в Обещание.

Перед удалением файла вы должны проверить 1) файл, находится ли он в корзине, потому что, если файл недоступен в корзине и используется deleteObject API это не выдает никакой ошибки 2)CORS Configuration из ведра. Используя headObject API дает статус файла в корзине.

AWS.config.update({
        accessKeyId: "*****",
        secretAccessKey: "****",
        region: region,
        version: "****"
    });
const s3 = new AWS.S3();

const params = {
        Bucket: s3BucketName,
        Key: "filename" //if any sub folder-> path/of/the/folder.ext
}
try {
    await s3.headObject(params).promise()
    console.log("File Found in S3")
    try {
        await s3.deleteObject(params).promise()
        console.log("file deleted Successfully")
    }
    catch (err) {
         console.log("ERROR in file Deleting : " + JSON.stringify(err))
    }
} catch (err) {
        console.log("File not Found ERROR : " + err.code)
}

Поскольку параметры являются постоянными, лучший способ использовать его с const, Если файл не найден в s3, он выдает ошибку NotFound : null,

Если вы хотите применить какие-либо операции в корзине, вы должны изменить разрешения CORS Configuration в соответствующем ведре в AWS. Для изменения разрешений Bucket->permission->CORS Configuration и добавьте этот код.

<CORSConfiguration>
<CORSRule>
    <AllowedOrigin>*</AllowedOrigin>
    <AllowedMethod>PUT</AllowedMethod>
    <AllowedMethod>POST</AllowedMethod>
    <AllowedMethod>DELETE</AllowedMethod>
    <AllowedMethod>GET</AllowedMethod>
    <AllowedMethod>HEAD</AllowedMethod>
    <AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>

для получения дополнительной информации о конфигурации CROS: https://docs.aws.amazon.com/AmazonS3/latest/dev/cors.html

Ты можешь использовать deleteObjects API для удаления нескольких объектов одновременно вместо вызова API для каждого удаляемого ключа. Помогает сэкономить время и пропускную способность сети.

Вы можете сделать следующее-

var deleteParam = {
    Bucket: 'bucket-name',
    Delete: {
        Objects: [
            {Key: 'a.txt'},
            {Key: 'b.txt'},
            {Key: 'c.txt'}
        ]
    }
};    
s3.deleteObjects(deleteParam, function(err, data) {
    if (err) console.log(err, err.stack);
    else console.log('delete', data);
});

Для справки см. https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html.

Вы можете перейти по этой ссылке на GitHub https://gist.github.com/jeonghwan-kim/9597478.

удалить-aws-s3.js:

var aws = require('aws-sdk');
var BUCKET = 'node-sdk-sample-7271';
aws.config.loadFromPath(require('path').join(__dirname, './aws-config.json'));
var s3 = new aws.S3();

var params = {
  Bucket: 'node-sdk-sample-7271', 
  Delete: { // required
    Objects: [ // required
      {
        Key: 'foo.jpg' // required
      },
      {
        Key: 'sample-image--10.jpg'
      }
    ],
  },
};

s3.deleteObjects(params, function(err, data) {
  if (err) console.log(err, err.stack); // an error occurred
  else     console.log(data);           // successful response
});

Очень прямо вперед

Сначала создайте экземпляр s3 и настройте его с учетными данными.

      const S3 = require('aws-sdk').S3;

const s3 = new S3({
    accessKeyId: process.env.AWS_ACCESS_KEY_ID,
    secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
    region: process.env.AWS_REGION
});

После этого следуйте документам

      
 var params = {
  Bucket: "ExampleBucket", 
  Key: "HappyFace.jpg"
 };
 s3.deleteObject(params, function(err, data) {
   if (err) console.log(err, err.stack); // an error occurred
   else     console.log(data);           // successful response
   /*
   data = {
   }
   */
 });

Сначала вам необходимо создать новый экземпляр AWS S3.

Вот как вы можете это сделать:

      const s3 = new AWS.S3({
  accessKeyId: AWS_ACCESS_KEY_ID,
  secretAccessKey: AWS_SECRET_ACCESS_KEY,
});

ЗаменятьAWS_ACCESS_KEY_ID&AWS_SECRET_ACCESS_KEYс вашим идентификатором ключа доступа AWS и секретным ключом доступа AWS .

Используя этот экземпляр S3, удалите объект:

      export const s3DeleteObject = (filename: string) => {
  return new Promise((resolve, reject) => {
    const params = {
      Key: filename,
      Bucket: AWS_BUCKET_NAME,
    };

    s3.deleteObject(params, (err: any, data: any) => {
      if (err) {
        reject(err);
      } else {
        resolve(data);
      }
    });
  });
};

Затем вызовите функцию там, где это необходимо:

      await s3DeleteObject("fileName");

С использованием@aws-sdk/client-s3обновленная документация находится здесь

С 2023 года s3 прекратит поддержку v2.

Чтобы решить проблему с помощью v3, используйте

      const client = new S3Client({});

export const main = async () => {
  const command = new DeleteObjectCommand({
    Bucket: "test-bucket",
    Key: "test-key.txt",
  });

  try {
    const response = await client.send(command);
    console.log(response);
  } catch (err) {
    console.error(err);
  }
};

Вам следует стараться избегать ключа доступа и секрета, но если вам действительно это нужно, используйте новый формат.

      new S3Client({
      credentials: {
        accessKeyId: process.env.S3_ACCESS_KEY_ID,
        secretAccessKey: process.env.S3_SECRET_ACCESS_KEY
      },
      region: process.env.S3_REGION
});

Просто добавлю. Вам не следует запускать этот код на стороне клиента. Если вы это сделаете, вы рискуете предоставить доступ к гораздо большему количеству ресурсов, чем следовало бы.

Вместо этого вам следует использовать предварительно подписанные URL-адреса. Вы можете сгенерировать их на серверной стороне для определенных файлов, а затем отправить их на внешний интерфейс.

Читать далее:

https://docs.aws.amazon.com/AmazonS3/latest/userguide/example_s3_DeleteObject_section.html

Другие вопросы по тегам