Bài viết minh họa cách tải file và hình ảnh từ AWS S3 bucket dùng Python và thư viện Boto3.
Boto là AWS SDK cho Python. Cung cấp hàm dễ dùng tương tác với dịch vụ AWS như EC2 và S3.
Tải file S3 với Python và Boto3
Ví dụ tải một file từ bucket S3 chỉ định.
Trước tiên tạo S3 client bằng boto3.client('s3').
import boto3
BUCKET_NAME = 'my_s3_bucket'
BUCKET_FILE_NAME = 'my_file.json'
LOCAL_FILE_NAME = 'downloaded.json'
def download_s3_file():
s3 = boto3.client('s3')
s3.download_file(BUCKET_NAME, BUCKET_FILE_NAME, LOCAL_FILE_NAME)
Method download_file nhận 3 tham số:
- Bucket name trong S3
- Tên file (kèm extension) muốn tải
- Tên file muốn lưu cục bộ
Tải tất cả đối tượng trong bucket chỉ định
Ví dụ tải tất cả object trong bucket S3. Giả định file nằm ở root bucket (không phải sub-folder).
import boto3
def download_all_files():
# Khởi tạo S3 resource
s3 = boto3.resource('s3')
# Chọn bucket
my_bucket = s3.Bucket('bucket_name')
# Tải file vào thư mục hiện tại
for s3_object in my_bucket.objects.all():
filename = s3_object.key
my_bucket.download_file(s3_object.key, filename)
Tải tất cả đối tượng trong sub-folder S3 bucket
Code tải file nằm trong sub-folder của S3 bucket.
Giả sử file ở bucket và path:
BUCKET_NAME = 'images'
PATH = pets/cats/
import boto3
import os
def download_all_objects_in_folder():
s3_resource = boto3.resource('s3')
my_bucket = s3_resource.Bucket('images')
objects = my_bucket.objects.filter(Prefix='pets/cats/')
for obj in objects:
path, filename = os.path.split(obj.key)
my_bucket.download_file(obj.key, filename)
Tham khảo
Boto 3 Documentation