मुझे अजगर में कोड लिखने की ज़रूरत है जो अमेज़ॅन s3 बाल्टी से आवश्यक फ़ाइल को हटा देगा। मैं अमेज़ॅन s3 बाल्टी से कनेक्ट करने में सक्षम हूं, और फ़ाइलों को बचाने के लिए भी, लेकिन मैं किसी फ़ाइल को कैसे हटा सकता हूं?
मुझे अजगर में कोड लिखने की ज़रूरत है जो अमेज़ॅन s3 बाल्टी से आवश्यक फ़ाइल को हटा देगा। मैं अमेज़ॅन 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 पर?
इसे बोटो का उपयोग करने का एक और तरीका मिला:
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
बोटो 3 का जवाब अपडेट करने के लिए कृपया प्राप्त करें
पायथन 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 /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>
यदि आप बोटो जैसे पाइथन लाइब्रेरी का उपयोग कर रहे हैं , तो इसे "डिलीट" फीचर को उजागर करना चाहिए, जैसे delete_key()
।
DELETE
REST इंटरफ़ेस के माध्यम से एक कॉल है। तो हां, "delete_key" नाम के बावजूद (जो मैं सहमत हूं) स्पष्ट नहीं है, यह वास्तव में कुंजी द्वारा संदर्भित ऑब्जेक्ट को हटा रहा है ।
अभी के लिए मैंने लिनक्स उपयोगिता s3cmd का उपयोग करके समस्या का समाधान किया है । मैंने इसे पायथन में इस तरह इस्तेमाल किया:
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/ और कुछ यूनिक्स कमांड का उपयोग करके कर सकते हैं ।
इस ai cli कमांड को काम करना चाहिए:
aws s3 rm s3://<your_bucket_name> --exclude "*" --include "<your_regex>"
यदि आप उप-फ़ोल्डरों को शामिल करना चाहते हैं, तो आपको ध्वज को जोड़ना चाहिए - संक्षिप्त
या यूनिक्स कमांड के साथ:
aws s3 ls s3://<your_bucket_name>/ | awk '{print $4}' | xargs -I% <your_os_shell> -c 'aws s3 rm s3:// <your_bucket_name> /% $1'
स्पष्टीकरण:
यदि आप अपने स्वयं के स्थानीय होस्ट कंसोल का उपयोग करके फ़ाइल को हटाने की कोशिश कर रहे हैं, तो आप इस अजगर स्क्रिप्ट को यह मानकर चला सकते हैं कि आपने सिस्टम में अपनी एक्सेस आईडी और गुप्त कुंजी पहले ही दे दी है।
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, 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()
कृपया इस कोड को आज़माएं
import boto3
s3 = boto3.client('s3')
s3.delete_object(Bucket="s3bucketname", Key="s3filepath")