আমার অজগরে কোড লিখতে হবে যা একটি অ্যামাজন এস 3 বালতি থেকে প্রয়োজনীয় ফাইলটি মুছবে। আমি অ্যামাজন এস 3 বালতির সাথে সংযোগ রাখতে সক্ষম হচ্ছি এবং ফাইলগুলি সংরক্ষণ করতে পারি তবে কীভাবে আমি কোনও ফাইল মুছতে পারি?
আমার অজগরে কোড লিখতে হবে যা একটি অ্যামাজন এস 3 বালতি থেকে প্রয়োজনীয় ফাইলটি মুছবে। আমি অ্যামাজন এস 3 বালতির সাথে সংযোগ রাখতে সক্ষম হচ্ছি এবং ফাইলগুলি সংরক্ষণ করতে পারি তবে কীভাবে আমি কোনও ফাইল মুছতে পারি?
উত্তর:
ব্যবহার 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
এস 3 - তে আসল ফাইলটির নাম বোঝানো হচ্ছে ?
বোটো ব্যবহার করে এটি করার আরও একটি উপায় খুঁজে পেয়েছে:
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
পাইথন বোটো 3 এসডিকে ব্যবহার করে (এবং ধরে নেওয়া শংসাপত্রগুলি এডাব্লুএসের জন্য সেটআপ করা হয়), নিম্নলিখিতটি বালতিতে একটি নির্দিষ্ট বস্তুকে মুছবে:
import boto3
client = boto3.client('s3')
client.delete_object(Bucket='mybucketname', Key='myfile.whatever')
আপডেটেড পদ্ধতিটি দেখার চেষ্টা করুন , যেহেতু বোটো 3 সময়ে সময়ে পরিবর্তিত হতে পারে। আমি আমার_বকেট.ডিলেট_বজেক্টস () ব্যবহার করেছি :
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
}
]
}
)
কোন ইন্টারফেস মাধ্যমে? আরআরএসটি ইন্টারফেস ব্যবহার করে আপনি কেবল একটি মুছুন :
DELETE /ObjectName HTTP/1.1
Host: BucketName.s3.amazonaws.com
Date: date
Content-Length: length
Authorization: signatureValue
এসওএপি ইন্টারফেসের মাধ্যমে :
<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
আরইএসটি ইন্টারফেসের মাধ্যমে কল। সুতরাং হ্যাঁ, "মুছে ফেলা_কি" নামটি সত্ত্বেও (যা আমি স্বীকার করি অস্পষ্ট), এটি কী দ্বারা উল্লিখিত অবজেক্টটি সত্যই মুছে ফেলছে ।
আপাতত আমি লিনাক্স ইউটিলিটি এস 3 সিএমডি ব্যবহার করে সমস্যার সমাধান করেছি । আমি পাইথনে এটি ব্যবহার করেছি:
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)
আপনি এটি আউস ক্লিপ ব্যবহার করে করতে পারেন: https://aws.amazon.com/cli/ এবং কিছু ইউনিক্স কমান্ড।
এই aws ক্লিপ কমান্ড কাজ করা উচিত:
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));
নিম্নলিখিতগুলি আমার জন্য কাজ করেছে (একটি জ্যাঙ্গো মডেলের উদাহরণের ভিত্তিতে, তবে আপনি 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")