引入Boto3,文档:
import boto3
from loguru import logger
class S3_upload():
def __init__(self, bucket_name, region):
aws_access_key_id = 'your aws_access_key_id'
aws_secret_access_key = 'your aws_secret_access_key'
region = region # 区域
# region = 'ap-east-1'
self.s3 = boto3.client('s3', aws_access_key_id=aws_access_key_id,
aws_secret_access_key=aws_secret_access_key,
region_name=region)
self.BUCKET_NAME = bucket_name
def upload_files(self, path_local, path_s3):
"""
上传(重复上传会覆盖同名文件)
:param path_local: 本地路径
:param path_s3: s3路径(文件名, 就是s3仓库上的key)
"""
logger.info(f'Start upload files.')
if not self.upload_single_file(path_local, path_s3):
logger.error(f'Upload files failed.')
return {'code': 200, 'message': '上传失败'}
logger.info(f'Upload files successful.')
return {'code': 200, 'message': '上传成功'}
def upload_single_file(self, src_local_path, dest_s3_path):
"""
上传单个文件
:param src_local_path:
:param dest_s3_path:
:return:
"""
try:
with open(src_local_path, 'rb') as f:
self.s3.upload_fileobj(f, self.BUCKET_NAME, dest_s3_path, ExtraArgs={"ContentType" : 'text/html'})
except Exception as e:
logger.error(f'Upload data failed. | src: {src_local_path} | dest: {dest_s3_path} | Exception: {e}')
return False
logger.info(f'Uploading file successful. | src: {src_local_path} | dest: {dest_s3_path}')
return True