web-dev-qa-db-ja.com

JavaScriptを使用したAWS S3オブジェクトの削除

JavaScriptを使用してAmazon s3からファイルを削除したい。私はすでにjavascriptを使用してs3にファイルをアップロードしています。どんなアイデアでも助けてください

22
user3335960

S3のjsメソッドを使用できます。 http://docs.aws.Amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#deleteObject-property

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などで前後に確認する必要があります

33
jlalcazar

次のような構成を使用できます。

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
});

そして、それをPromiseにラップすることを忘れないでください。

17

削除するキーごとにAPIを呼び出す代わりに、deleteObjects AP​​Iを使用して複数のオブジェクトを一度に削除できます。時間とネットワーク帯域幅を節約できます。

次のことができます-

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#deleteObjects-property

5
Aniket Thakur

ファイルを削除する前に、1)ファイルがバケット内にあるかどうかを確認する必要があります。ファイルがバケットで使用できず、deleteObject AP​​Iを使用すると、エラーがスローされないためです2)CORS ConfigurationheadObject AP​​Iを使用することにより、バケット内のファイルステータスが提供されます。

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)
}

Paramsは定数であるため、constで使用する最良の方法です。ファイルがs3で見つからない場合、エラーNotFound : nullがスローされます。

バケット内のオペレーションを適用する場合は、AWS内のそれぞれのバケット内のCORS Configurationのアクセス許可を変更する必要があります。許可の変更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

4
banoth ravinder