Upload file tới Amazon S3 sử dụng Python 3


Bài viết này mình sẽ hướng dẫn các bạn upload file, hình ảnh tới Amazon S3 – Dịch vụ lưu trữ file nổi tiếng của Amazon. Để thực hiện các bạn vui lòng tham khảo các bài viết sau:

Cài đặt thư viện boto3 của Amazon Web Services

Để cài đặt thư viện boto3 chúng ta sử dụng công cụ quản lý pip3 của Python 3

pip3 install boto3

Kiểm tra version sau khi cài đặt bằng lệnh pip3 show boto3

Upload file tới Amazon S3 sử dụng Python 3

Để upload file chúng ta cần các thông tin sau:

  • <ENDPOINT_URL>: Đường dẫn API của Amazon S3. VD: https://s3.ap-northeast-1.amazonaws.com. Với ap-northeast-1 là region mà bạn muốn upload tới. 
  • <ACCESS_KEY>: Access Key
  • <SECRET_KEY>: Secret Key
  • <BUCKET_NAME>: Tên của bucket

Source python 3 để upload

#!/usr/bin/python3
import os
import boto3
import mimetypes
from datetime import datetime

image_path = '/home/vinasupport/Pictures/vinasupport.jpg'
endpoint_url = '<ENDPOINT_URL>'
access_key = '<ACCESS_KEY>'
secret_key = '<SECRET_KEY>'
region = '<REGION_NAME>'
bucket_name = 'vinasupport.com'
app_url = 'https://s3-ap-northeast-1.amazonaws.com/vinasupport.com'


# Create Session
session = boto3.Session(
    region_name=region,
    aws_access_key_id=access_key,
    aws_secret_access_key=secret_key,
)

# Get bucket resource
s3 = session.resource('s3', endpoint_url=endpoint_url)
bucket = s3.Bucket(bucket_name)
# bucket.put_object(Key='Test/')
image_name = os.path.basename(image_path)
date_now = datetime.now()
upload_path = "uploads/{:%Y/%m/%d}/{}".format(date_now, image_name)
upload_url = "{}/uploads/{:%Y/%m/%d}/{}".format(app_url, date_now, image_name)
content_type = mimetypes.guess_type(image_path)
s3.meta.client.upload_file(image_path, bucket_name, upload_path, ExtraArgs={
    'ACL': 'public-read',
    'ContentType': content_type[0]
})

# List files and folders
for obj in bucket.objects.filter(Prefix='uploads/'):
    print('{0}:{1}'.format(bucket.name, obj.key))

Kết quả:

Bạn đã upload file thành công đến bucket: vinasupport.com

Trên giao diện quản lý

             
SHARE

Bài viết liên quan

mode_edit Bình luận của bạn

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

account_circle
web