如何从亚马逊s3桶中删除文件?

Suh*_*ail 68 python amazon-s3 bucket

我需要在python中编写代码,从Amazon s3存储桶中删除所需的文件.我可以连接到亚马逊s3存储桶,也可以保存文件,但是如何删除文件呢?

Suh*_*ail 81

使用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)
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢在我的文件中它的结果是`bucket.list()` (16认同)
  • 如果你想删除存储桶中的所有内容,你可以这样做:`for b in b.list():b.delete_key(x.key)` (10认同)

Koh*_*ert 62

使用boto3(目前版本1.4.4)使用S3.Object.delete().

import boto3

s3 = boto3.resource('s3')
s3.Object('your-bucket', 'your-key').delete()
Run Code Online (Sandbox Code Playgroud)

  • @AkashTantri 我没有亲自尝试过,但文档说它_删除了空版本(如果有的话)[...] 如果没有空版本,Amazon S3 不会删除任何对象。_ 所以我的猜测是它不会抛出错误。如果您碰巧尝试了(只需执行类似 `s3.Object('existing-bucket', 'bogus-key').delete()` 之类的操作,看看会发生什么。也可以尝试一下 `s3.Object('bogus-bucket' , '假密钥').delete()`。 (3认同)
  • 您可以使用它在删除文件之前检查文件是否存在: obj_exists = list(s3.Bucket('bucket').objects.filter(Prefix='key') if len(obj_exists) > 0 and obj_exists[0]。 key == 'key': s3.Object('bucket','key').delete() (3认同)

Anc*_*nia 43

使用Python boto3 SDK(并假设为AWS设置了凭据),以下内容将删除存储桶中的指定对象:

import boto3

client = boto3.client('s3')
client.delete_object(Bucket='mybucketname', Key='myfile.whatever')
Run Code Online (Sandbox Code Playgroud)

  • 这不只是创建一个删除标记? (6认同)
  • @Rob boto3文档具有误导性.如果对象是版本化的,它将创建一个删除标记.否则它将删除该对象. (6认同)

Com*_*nd0 23

欢迎来到 2020 年,这里是 Python/Django 中的答案:

from django.conf import settings 
import boto3   
s3 = boto3.client('s3')
s3.delete_object(Bucket=settings.AWS_STORAGE_BUCKET_NAME, Key=f"media/{item.file.name}")
Run Code Online (Sandbox Code Playgroud)

我花了太长时间才找到答案,就这么简单。


Jav*_*avi 11

尝试寻找更新的方法,因为 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
            }
        ]
    }
)

Run Code Online (Sandbox Code Playgroud)


San*_*nda 10

请试试这个代码

import boto3   
s3 = boto3.client('s3')
s3.delete_object(Bucket="s3bucketname", Key="s3filepath")
Run Code Online (Sandbox Code Playgroud)


Cyr*_* N. 5

我很惊讶没有这种简单的方法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()
Run Code Online (Sandbox Code Playgroud)


Gan*_*n J 5

以下是可用于删除存储桶的代码片段,

import boto3, botocore
from botocore.exceptions import ClientError

s3 = boto3.resource("s3",aws_access_key_id='Your-Access-Key',aws_secret_access_key='Your-Secret-Key')
s3.Object('Bucket-Name', 'file-name as key').delete()
Run Code Online (Sandbox Code Playgroud)


T.J*_*der 3

通过哪个接口?使用 REST 接口,您只需发送删除

DELETE /ObjectName HTTP/1.1
Host: BucketName.s3.amazonaws.com
Date: date
Content-Length: length
Authorization: signatureValue
Run Code Online (Sandbox Code Playgroud)

通过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>
Run Code Online (Sandbox Code Playgroud)

如果您使用的是 boto 这样的Python 库,它应该公开“删除”功能,例如delete_key().

  • 删除大量名称中具有共同前缀的文件怎么样?S3是否允许在这种情况下进行批量删除,或者必须将它们一一删除(这很慢)? (2认同)