কম্পিউটার টিউটোরিয়াল

Boto3 লাইব্রেরি এবং AWS Resource ব্যবহার করে S3-এ একটি অবজেক্ট আপলোড করার পদ্ধতি


সমস্যা বিবরণ − Python-এ Boto3 লাইব্রেরি ব্যবহার করে S3-এ একটি অবজেক্ট আপলোড করা। উদাহরণস্বরূপ, S3-এ Bucket_1-এ test.zip আপলোড করার পদ্ধতি।

এই সমস্যাটি সমাধানের পদ্ধতি/এলগরিদম

ধাপ ১ − boto3 এবং botocore.exceptions ইমপোর্ট করুন এক্সেপশন হ্যান্ডলিং-এর জন্য।

ধাপ ২ − pathlib থেকে PurePosixPath ইমপোর্ট করুন পথ থেকে ফাইলনেম বের করার জন্য।

ধাপ ৩ − s3_path এবং filepath হলো upload_object_into_s3 ফাংশনের দুটি প্যারামিটার।

ধাপ ৪ − যাচাই করুন যে s3_path AWS ফরম্যাটে s3://bucket_name/key হিসেবে এবং filepath লোকাল পথ হিসেবে C://users/filename ফরম্যাটে পাস করা হয়েছে।

ধাপ ৫ − boto3 লাইব্রেরি ব্যবহার করে একটি AWS সেশন তৈরি করুন।

ধাপ ৬ − S3-এর জন্য একটি AWS রিসোর্স তৈরি করুন।

ধাপ ৭ − S3 পাথটি স্প্লিট করুন এবং রুট বাকেটের নাম এবং কী পথ আলাদা করুন।

ধাপ ৮ − সম্পূর্ণ ফাইলপথ থেকে ফাইলনেম বের করুন এবং S3 কী পথে যোগ করুন।

ধাপ ৯ − এখন লোকাল ফাইলটি S3-এ আপলোড করতে upload_fileobj ফাংশনটি ব্যবহার করুন।

ধাপ ১০ − অপারেশন শেষ হওয়া পর্যন্ত অপেক্ষা করতে wait_until_exists ফাংশনটি ব্যবহার করুন।

ধাপ ১১ − রেসপন্স কোডের ভিত্তিতে এক্সেপশন হ্যান্ডেল করুন যাতে বুঝা যায় ফাইল আপলোড হয়েছে কিনা।

ধাপ ১২ − ফাইল আপলোড করার সময় যদি কিছু ভুল হয় তবে জেনেরিক এক্সেপশন হ্যান্ডেল করুন।

উদাহরণ

AWS S3-এ একটি ফাইল আপলোড করতে নিচের কোডটি ব্যবহার করুন −

import boto3
from botocore.exceptions import ClientError
from pathlib import PurePosixPath

def upload_object_into_s3(s3_path, filepath):
    if 's3://' in filepath:
        print('SourcePath is not a valid path.' + filepath)
        raise Exception('SourcePath is not a valid path.')
    elif s3_path.find('s3://') == -1:
        print('DestinationPath is not a s3 path.' + s3_path)
        raise Exception('DestinationPath is not a valid path.')
    session = boto3.session.Session()
    s3_resource = session.resource('s3')
    tokens = s3_path.split('/')
    target_key = ""
    if len(tokens) > 3:
        for tokn in range(3, len(tokens)):
            if tokn == 3:
                target_key += tokens[tokn]
            else:
                target_key += "/" + tokens[tokn]
    target_bucket_name = tokens[2]
    file_name = PurePosixPath(filepath).name
    if target_key != '':
        target_key.strip()
        key_path = target_key + "/" + file_name
    else:
        key_path = file_name
    print(("key_path: " + key_path, 'target_bucket: ' + target_bucket_name))
    try:
        # লোকাল পথ থেকে এন্টিটি আপলোড করা
        with open(filepath, "rb") as file:
            s3_resource.meta.client.upload_fileobj(file, target_bucket_name, key_path)
            try:
                s3_resource.Object(target_bucket_name, key_path).wait_until_exists()
                file.close()
            except ClientError as error:
                error_code = int(error.response['Error']['Code'])
                if error_code == 412 or error_code == 304:
                    print("Object didn't Upload Successfully ", target_bucket_name)
                    raise error
            return "Object Uploaded Successfully"
    except Exception as error:
        print("Error in upload object function of s3 helper: " + error.__str__())
        raise error

print(upload_object_into_s3('s3://Bucket_1/testfolder', 'c://test.zip'))

আউটপুট

key_path:/testfolder/test.zip, target_bucket: Bucket_1
Object Uploaded Successfully

  1. পাইথনে ফাইল এক্সিস্ট করে কিনা চেক কীভাবে করবেন?

  2. পাইথনে MySQL-এ ডেট অবজেক্ট ইন্সার্ট কীভাবে করবেন?

  3. পাইথনে ফাইল এক্সটেনশন এক্সট্রাক্ট করার পদ্ধতি

  4. পাইথনে রিকার্সিভভাবে একাধিক ফাইল রিনেম করার পদ্ধতি