web-dev-qa-db-fra.com

comment supprimer des fichiers du compartiment Amazon s3?

J'ai besoin d'écrire du code dans python qui supprimera le fichier requis d'un compartiment Amazon s3. Je peux me connecter au compartiment Amazon s3, et aussi pour enregistrer des fichiers, mais comment puis-je supprimer un fichier?

64
Suhail

trouvé une autre façon de le faire en utilisant le boto:

from boto.s3.connection import S3Connection, Bucket, Key

conn = S3Connection(AWS_ACCESS_KEY, AWS_SECERET_KEY)

b = Bucket(conn, S3_BUCKET_NAME)

k = Key(b)

k.key = 'images/my-images/'+filename

b.delete_key(k)
79
Suhail

En utilisant boto3 (Actuellement la version 1.4.4) utilisez S3.Object.delete() .

import boto3

s3 = boto3.resource('s3')
s3.Object('your-bucket', 'your-key').delete()
52
Kohányi Róbert

En utilisant Python boto3 SDK (et en supposant que les informations d'identification sont configurées pour AWS), ce qui suit supprimera un objet spécifié dans un compartiment:

import boto3

client = boto3.client('s3')
client.delete_object(Bucket='mybucketname', Key='myfile.whatever')
39
Anconia

Je suis surpris qu'il n'y ait pas ce moyen simple: key.delete():

from boto.s3.connection import S3Connection, Bucket, Key

conn = S3Connection(AWS_ACCESS_KEY, AWS_SECERET_KEY)
bucket = Bucket(conn, S3_BUCKET_NAME)
k = Key(bucket = bucket, name=path_to_file)
k.delete()
3
Cyril N.

Via quelle interface? En utilisant l'interface REST, vous venez de envoyer une suppression :

DELETE /ObjectName HTTP/1.1
Host: BucketName.s3.amazonaws.com
Date: date
Content-Length: length
Authorization: signatureValue

Via interface SOAP :

<DeleteObject xmlns="http://doc.s3.amazonaws.com/2006-03-01">
  <Bucket>quotes</Bucket>
  <Key>Nelson</Key>
  <AWSAccessKeyId> 1D9FVRAYCP1VJEXAMPLE=</AWSAccessKeyId>
  <Timestamp>2006-03-01T12:00:00.183Z</Timestamp>
  <Signature>Iuyz3d3P0aTou39dzbqaEXAMPLE=</Signature>
</DeleteObject>

Si vous utilisez une bibliothèque Python comme boto , elle devrait exposer une fonctionnalité de "suppression", comme delete_key() =.

2
T.J. Crowder

Cela a fonctionné pour moi l'essayer.

import boto
import sys
from boto.s3.key import Key
import boto.s3.connection

AWS_ACCESS_KEY_ID = '<access_key>'
AWS_SECRET_ACCESS_KEY = '<secret_access_key>'
Bucketname = 'bucket_name' 

conn = boto.s3.connect_to_region('us-east-2',
        aws_access_key_id=AWS_ACCESS_KEY_ID,
        aws_secret_access_key=AWS_SECRET_ACCESS_KEY,
        is_secure=True,              
        calling_format = boto.s3.connection.OrdinaryCallingFormat(),
        )
bucket = conn.get_bucket(Bucketname)

k = Key(bucket)

k.key = 'filename to delete'
bucket.delete_key(k)   
1
muthu

Pour l'instant, j'ai résolu le problème en utilisant l'utilitaire Linux s3cmd . Je l'ai utilisé comme ça en Python:

delFile = 's3cmd -c /home/project/.s3cfg del s3://images/anon-images/small/' + filename
os.system(delFile)
1
Suhail

vous pouvez le faire en utilisant aws cli: https://aws.Amazon.com/cli/ et une commande unix.

cette commande aws cli devrait fonctionner:

aws s3 rm s3://<your_bucket_name> --exclude "*" --include "<your_regex>" 

si vous souhaitez inclure des sous-dossiers, vous devez ajouter l'indicateur - récursif

ou avec des commandes Unix:

aws s3 ls s3://<your_bucket_name>/ | awk '{print $4}' | xargs -I%  <your_os_Shell>   -c 'aws s3 rm s3:// <your_bucket_name>  /% $1'

explication:

  1. liste tous les fichiers sur le bucket - pipe ->
  2. obtenir le 4ème paramètre (c'est le nom du fichier) - pipe -> // vous pouvez le remplacer par la commande linux pour correspondre à votre modèle
  3. exécuter le script de suppression avec aws cli
1
ggcarmi

Essayez de rechercher la dernière méthode mise à jour . Boto3, peut changer de temps en temps. J'ai utilisé my_bucket.delete_objects ():

import boto3
from boto3.session import Session

session = Session(aws_access_key_id='your_key_id',
                  aws_secret_access_key='your_secret_key')

# s3_client = session.client('s3')
s3_resource = session.resource('s3')
my_bucket = s3_resource.Bucket("your_bucket_name")

response = my_bucket.delete_objects(
    Delete={
        'Objects': [
            {
                'Key': "your_file_name_key"   # the_name of_your_file
            }
        ]
    }
)

0
Javi