как удалить файлы из Amazon S3 Bucket? - PullRequest
64 голосов
/ 29 июня 2010

Мне нужно написать код на python, который удалит нужный файл из корзины Amazon s3. Я могу подключиться к корзине Amazon s3, а также сохранить файлы, но как я могу удалить файл?

Ответы [ 9 ]

78 голосов
/ 16 июля 2010

нашел еще один способ сделать это с помощью 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)
49 голосов
/ 10 мая 2017

Используя boto3 (в настоящее время версия 1.4.4) используйте S3.Object.delete().

import boto3

s3 = boto3.resource('s3')
s3.Object('your-bucket', 'your-key').delete()
36 голосов
/ 10 августа 2016

Используя Python boto3 SDK (и предполагая, что учетные данные настроены для AWS), следующее удалит указанный объект в сегменте:

import boto3

client = boto3.client('s3')
client.delete_object(Bucket='mybucketname', Key='myfile.whatever')
3 голосов
/ 02 мая 2016

Я удивлен, что не так просто: 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()
2 голосов
/ 29 июня 2010

через какой интерфейс? Используя интерфейс 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().

1 голос
/ 17 марта 2019

вы можете сделать это, используя aws cli: https://aws.amazon.com/cli/ и некоторые команды unix.

эти команды aws cli должны работать:

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

если вы хотите включить подпапки, вы должны добавить флаг - рекурсивный

или с помощью команд 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'

пояснение:

  1. список всех файлов в корзине - pipe ->
  2. получить 4-й параметр (это имя файла) - pipe--> // вы можете заменить его командой linux для соответствия вашему шаблону
  3. запустить скрипт удаления с помощью aws cli
1 голос
/ 09 апреля 2018

Это работает для меня, попробуйте.

1 голос
/ 29 июня 2010

На данный момент я решил проблему с помощью утилиты Linux s3cmd . Я использовал это так в Python:

delFile = 's3cmd -c /home/project/.s3cfg del s3://images/anon-images/small/' + filename
os.system(delFile)
0 голосов
/ 13 мая 2019

Попробуйте найти последний обновленный метод .Boto3, может меняться время от времени.Я использовал 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
            }
        ]
    }
)

...