web-dev-qa-db-fra.com

Aws s3 supprimer un objet à l'aide de javascript

Je souhaite supprimer un fichier d'Amazon s3 à l'aide de javascript. J'ai déjà téléchargé le fichier sur s3 en utilisant javascript. des idées s'il vous plaît aider

16
user3335960

Vous pouvez utiliser la méthode js à partir de s3: 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
});

Sachez que S3 ne le renvoie jamais si l'objet a été supprimé ..__ Vous devez le vérifier avant ou après avec getobject, headobject, waitfor, etc.

23
jlalcazar

Vous pouvez utiliser la construction comme ceci:

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

Et n'oubliez pas de l'envelopper à la Promise .

14
Vitaliy Andrusishyn

Avant de supprimer le fichier, vous devez 1) vérifier si le fichier se trouve dans le compartiment, car si le fichier n'est pas disponible dans le compartiment et que vous utilisez l'API deleteObject, cela ne génère aucune erreur 2) CORS Configuration du compartiment. En utilisant headObject, API donne l’état du fichier dans le compartiment.

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

Comme les paramètres sont constants, la meilleure façon de l’utiliser avec const. Si le fichier n'est pas trouvé dans le s3, l'erreur NotFound : null est générée.

Si vous souhaitez appliquer des opérations dans le compartiment, vous devez modifier les autorisations de CORS Configuration dans le compartiment correspondant dans AWS. Pour modifier les autorisations Bucket->permission->CORS Configuration et ajouter ce code.

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

pour plus d'informations sur la configuration de CROS: https://docs.aws.Amazon.com/AmazonS3/latest/dev/cors.html

1
banoth ravinder

Vous pouvez utiliser l'API deleteObjects pour supprimer plusieurs objets à la fois au lieu d'appeler l'API pour chaque clé à supprimer. Permet de gagner du temps et de réduire la bande passante du réseau. 

Vous pouvez faire après-

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

Pour référence, voir - https://docs.aws.Amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#deleteObjects-property

0
Aniket Thakur