Мне нужно написать код на Python, который удалит нужный файл из корзины Amazon S3. Я могу подключиться к корзине Amazon s3, а также сохранить файлы, но как я могу удалить файл?
Как удалить файлы из корзины amazon s3?
Ответ 1
нашел еще один способ сделать это, используя 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)
Ответ 2
Используя boto3
(в настоящее время версия 1.4.4), используйте S3.Object.delete()
.
import boto3
s3 = boto3.resource('s3')
s3.Object('your-bucket', 'your-key').delete()
Ответ 3
Используя Python boto3 SDK (и если учетные данные настроены для AWS), следующее будет удалять указанный объект в ведре:
import boto3
client = boto3.client('s3')
client.delete_object(Bucket='mybucketname', Key='myfile.whatever')
Ответ 4
Я удивлен, что нет такого простого способа: 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()
Ответ 5
Через какой интерфейс? Используя интерфейс REST, вы просто отправить удаление:
DELETE /ObjectName HTTP/1.1
Host: BucketName.s3.amazonaws.com
Date: date
Content-Length: length
Authorization: signatureValue
Через 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>
Если вы используете библиотеку Python как boto, она должна выставить функцию удаления, например delete_key()
.
Ответ 6
На данный момент я решил проблему с помощью утилиты Linux s3cmd. Я использовал это в Python:
delFile = 's3cmd -c /home/project/.s3cfg del s3://images/anon-images/small/' + filename
os.system(delFile)
Ответ 7
Это сработало для меня, попробуйте.
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)
Ответ 8
Вы можете сделать это, используя aws cli: https://aws.amazon.com/cli/ и некоторую команду unix.
это aws cli команды должны работать:
aws s3 rm s3://<your_bucket_name> --exclude "*" --include "<your_regex>"
если вы хотите включить подпапки, вы должны добавить флаг --recursive
или с помощью команд 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'
объяснение:
- список всех файлов в корзине --pipe ->
- получить 4-й параметр (это имя файла) --pipe ->//вы можете заменить его командой linux, чтобы соответствовать вашему шаблону
- запустить скрипт удаления с помощью aws cli
Ответ 9
Попробуйте поискать последний обновленный метод. Boto3, может меняться время от времени:
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
}
]
}
)