সমস্যা বিবৃতি − S3 এ একটি বস্তু আপলোড করতে পাইথনে Boto3 লাইব্রেরি ব্যবহার করুন। উদাহরণস্বরূপ, S3 এর Bucket_1 এ test.zip কিভাবে আপলোড করবেন।
এই সমস্যা সমাধানের জন্য অ্যাপ্রোচ/অ্যালগরিদম
ধাপ 1 − ব্যতিক্রমগুলি পরিচালনা করতে boto3 এবং botocore ব্যতিক্রমগুলি আমদানি করুন৷
৷ধাপ 2 - পাথলিব থেকে , পাথ থেকে ফাইলের নাম পুনরুদ্ধার করতে PurePosixPath আমদানি করুন
ধাপ 3 − s3_path এবং ফাইলপথ upload_object_into_s3 ফাংশনের দুটি প্যারামিটার
পদক্ষেপ 4৷ − s3_path যাচাই করুন AWS ফরম্যাটে s3://bucket_name/key হিসাবে পাস করা হয় এবং ফাইলপথ স্থানীয় পথ হিসাবে C://users/filename
ধাপ 5 - boto3 লাইব্রেরি ব্যবহার করে একটি AWS সেশন তৈরি করুন৷
৷ধাপ 6 - S3 এর জন্য একটি AWS রিসোর্স তৈরি করুন।
পদক্ষেপ 7 − S3 পাথকে বিভক্ত করুন এবং রুট বাকেটের নাম এবং কী পাথ আলাদা করতে অপারেশন সম্পাদন করুন
ধাপ 8 − সম্পূর্ণ ফাইলপথের জন্য ফাইলের নাম পান এবং S3 কী পাথে যোগ করুন।
ধাপ 9 − এখন upload_fileobj ফাংশনটি ব্যবহার করুন S3 এ স্থানীয় ফাইল আপলোড করতে।
ধাপ 10 − wait_until_exists ফাংশনটি ব্যবহার করুন অপারেশন শেষ না হওয়া পর্যন্ত অপেক্ষা করুন৷
ধাপ 11 − ফাইল আপলোড করা হয়েছে কিনা তা যাচাই করতে প্রতিক্রিয়া কোডের উপর ভিত্তি করে ব্যতিক্রমটি পরিচালনা করুন৷
ধাপ 12 − ফাইল আপলোড করার সময় কিছু ভুল হলে জেনেরিক ব্যতিক্রমটি পরিচালনা করুন
উদাহরণ
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: # uploading Entity from local path 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