Amazon s3 버킷에서 필요한 파일을 삭제하는 코드를 Python으로 작성해야합니다. Amazon s3 버킷에 연결하고 파일을 저장할 수 있지만 파일을 삭제하려면 어떻게해야합니까?
답변:
사용 boto3
(현재 버전 1.4.4)를 사용 S3.Object.delete()
.
import boto3
s3 = boto3.resource('s3')
s3.Object('your-bucket', 'your-key').delete()
s3.Object('existing-bucket', 'bogus-key').delete()
하고 어떻게되는지 또한보십시오. s3.Object('bogus-bucket', 'bogus-key').delete()
.
your-key
여기 your-bucket
가 S3 의 실제 파일 이름을 의미 합니까 ?
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)
for x in b.list(): b.delete_key(x.key)
bucket.list()
Bucket
및 을 가져와야 Key
합니다. 에서와 같이 :from boto.s3.connection import S3Connection, Bucket, Key
>>> from boto.s3.connection import S3Connection, Bucket, Key Traceback (most recent call last): File "<console>", line 1, in <module> ImportError: No module named boto.s3.connection
boto3에 대한 답을 업데이트하십시오
Python boto3 SDK를 사용하고 (그리고 AWS에 대한 자격 증명이 설정되었다고 가정) 다음은 버킷에서 지정된 객체를 삭제합니다.
import boto3
client = boto3.client('s3')
client.delete_object(Bucket='mybucketname', Key='myfile.whatever')
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
}
]
}
)
어떤 인터페이스를 통해? REST 인터페이스를 사용하면 다음과 같이 delete를 보냅니다 .
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>
당신은 파이썬 라이브러리를 사용하는 경우 BOTO 등이 , 그것은처럼 "삭제"기능을 노출한다 delete_key()
.
DELETE
REST 인터페이스를 통한 호출입니다. 예, "delete_key"라는 이름 (내가 동의하는 것은 불분명 함)에도 불구하고 실제로 키가 참조 하는 객체를 삭제하는 것 입니다.
지금은 Linux 유틸리티 s3cmd를 사용하여 문제를 해결했습니다 . Python에서 다음과 같이 사용했습니다.
delFile = 's3cmd -c /home/project/.s3cfg del s3://images/anon-images/small/' + filename
os.system(delFile)
그것은 나를 위해 일했습니다.
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)
aws cli : https://aws.amazon.com/cli/ 및 일부 unix 명령을 사용하여 수행 할 수 있습니다 .
이 aws cli 명령이 작동해야합니다.
aws s3 rm s3://<your_bucket_name> --exclude "*" --include "<your_regex>"
하위 폴더를 포함하려면 --recursive 플래그를 추가해야합니다.
또는 유닉스 명령으로 :
aws s3 ls s3://<your_bucket_name>/ | awk '{print $4}' | xargs -I% <your_os_shell> -c 'aws s3 rm s3:// <your_bucket_name> /% $1'
설명:
자체 로컬 호스트 콘솔을 사용하여 파일을 삭제하려는 경우 시스템에 이미 액세스 ID와 비밀 키를 할당했다고 가정하고이 Python 스크립트를 실행 해 볼 수 있습니다.
import boto3
#my custom sesssion
aws_m=boto3.session.Session(profile_name="your-profile-name-on-local-host")
client=aws_m.client('s3')
#list bucket objects before deleting
response = client.list_objects(
Bucket='your-bucket-name'
)
for x in response.get("Contents", None):
print(x.get("Key",None));
#delete bucket objects
response = client.delete_object(
Bucket='your-bucket-name',
Key='mydocs.txt'
)
#list bucket objects after deleting
response = client.list_objects(
Bucket='your-bucket-name'
)
for x in response.get("Contents", None):
print(x.get("Key",None));
다음은 나를 위해 일했습니다 (Django 모델에 대한 예제를 기반으로하지만 delete
메서드 코드를 자체적으로 사용할 수 있음).
import boto3
from boto3.session import Session
from django.conf import settings
class Video(models.Model):
title=models.CharField(max_length=500)
description=models.TextField(default="")
creation_date=models.DateTimeField(default=timezone.now)
videofile=models.FileField(upload_to='videos/', null=True, verbose_name="")
tags = TaggableManager()
actions = ['delete']
def __str__(self):
return self.title + ": " + str(self.videofile)
def delete(self, *args, **kwargs):
session = Session (settings.AWS_ACCESS_KEY_ID, settings.AWS_SECRET_ACCESS_KEY)
s3_resource = session.resource('s3')
s3_bucket = s3_resource.Bucket(settings.AWS_STORAGE_BUCKET_NAME)
file_path = "media/" + str(self.videofile)
response = s3_bucket.delete_objects(
Delete={
'Objects': [
{
'Key': file_path
}
]
})
super(Video, self).delete(*args, **kwargs)
이 코드를 시도하십시오
import boto3
s3 = boto3.client('s3')
s3.delete_object(Bucket="s3bucketname", Key="s3filepath")