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?
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)
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()
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')
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()
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()
=.
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)
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)
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:
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
}
]
}
)