boto3 설치
pip install boto3
s3 config file 정의
# m_config.py
AWS_ACCESS_KEY = "SDKNFLWKEFNWEFKEFJA"
AWS_SECRET_ACCESS_KEY = "fWEKLFWKLENWK"
AWS_S3_BUCKET_REGION = "ap-northeast-2"
AWS_S3_BUCKET_NAME = "file-storage"
s3 connect 함수 및 파일 업로드/다운로드 함수 정의
# import module
import boto3
from .m_config import AWS_ACCESS_KEY, AWS_SECRET_ACCESS_KEY
from .m_config import AWS_S3_BUCKET_NAME, AWS_S3_BUCKET_REGION
def s3_connection():
'''
s3 bucket에 연결
:return: 연결된 s3 객체
'''
try:
s3 = boto3.client(
service_name='s3',
region_name=AWS_S3_BUCKET_REGION,
aws_access_key_id=AWS_ACCESS_KEY,
aws_secret_access_key=AWS_SECRET_ACCESS_KEY
)
except Exception as e:
print(e)
exit(ERROR_S3_CONNECTION_FAILED)
else:
print("s3 bucket connected!")
return s3
def s3_put_object(s3, bucket, filepath, access_key):
'''
s3 bucket에 지정 파일 업로드
:param s3: 연결된 s3 객체(boto3 client)
:param bucket: 버킷명
:param filepath: 파일 위치
:param access_key: 저장 파일명
:return: 성공 시 True, 실패 시 False 반환
'''
try:
s3.upload_file(filepath, bucket, access_key)
except Exception as e:
print(e)
return False
return SUCCESS
def s3_get_object(s3, bucket, object_name, file_name):
'''
s3 bucket에서 지정 파일 다운로드
:param s3: 연결된 s3 객체(boto3 client)
:param bucket: 버킷명
:param object_name: s3에 저장된 object 명
:param file_name: 저장할 파일 명(path)
:return: 성공 시 True, 실패 시 False 반환
'''
try:
s3.download_file(bucket, object_name, file_name)
except Exception as e:
print(e)
return False
return True
s3 connect 함수 사용
#app.py
import os
import flask
from .m_connection import s3_connection, s3_put_object
from .m_config import AWS_S3_BUCKET_NAME, AWS_S3_BUCKET_REGION
...중략
s3 = s3_connection()
@app.route('/fileUpload', methods=['POST'])
def upload():
f = request.files['file']
f.save("./temp")
ret =. s3_put_object(s3, AWS_S3_BUCKET_NAME, "./temp", ".temp")
if ret :
print("파일 저장 성공")
else:
print("파일 저장 실패")
'About > Flask' 카테고리의 다른 글
[Python] Flask url_for 함수 (0) | 2021.09.05 |
---|---|
[Python] Flask 변수와 컨버터 (0) | 2021.09.05 |
[Python] Flask를 이용한 요청 처리 (0) | 2021.06.07 |
[Python] MicroService에서 twisted의 문제점 (0) | 2021.06.06 |
[Python] Greenlet과 Gevent(WSGI 성능 향상) (3) | 2021.06.06 |