python flask에서 request받은 파일을 aws s3에 저장하는 방법

정훈·2023년 2월 21일
0
post-thumbnail

이번에 사용자에게 multipart/form-data로 이미지 파일들을 받아 aws s3에 저장하는 작업을 해볼려고 합니다.

파이썬 코드

from flask import Flask, request
import boto3

app = Flask(__name__)

# 파일 업로드
@app.route('/fileupload', methods=['POST'])
def file_upload():
    file = request.files['file'].read()
    
    AWS_ACCESS_KEY_ID ="ACCESS_KEY"
	AWS_SECRET_ACCESS_KEY = "SECRET_ACCESS_KEY"
	AWS_DEFAULT_REGION = "리전 코드"
	session = boto3.Session(
                   aws_access_key_id=AWS_ACCESS_KEY_ID,
          		   aws_secret_access_key=AWS_SECRET_ACCESS_KEY,
                   region_name=AWS_DEFAULT_REGION
            )
            
     bucket = 'bucket'           #버켓 주소
     key = 'test2.jpg'            # s3 저장할 파일 위치 및 파일 이미지
     s3 = session.resource('s3')
     s3.Object(bucket, key).put(Body=file)
     return "success"

if __name__ == "__main__":
    app.run(debug=True, host='127.0.0.1', port=8888)

설명

  • 이런식으로 request.files['file'].read()를 사용하면 전송받은 파일데이터만 읽을 수 있습니다.
  • 이제 boto3를 연결을 해야합니다. 여기서 중요한것은 보통 Client를 통해서 aws에 접속하는것이 일반적이지만, 여기서는 Session을 사용해서 접속을 합니다.
    • Client와 Session차이점이 설명된 링크는 아래에 참고 자료 링크에 적어두겠습니다.

마지막으로 세션으로 접속해 resource를 통해서 s3에 접근합니다. 그리고 Object를 사용해서 .put()으로 file을 추가 해주면 됩니다.

참고 자료

  1. 파일 오브젝트를 s3에 전송하는 방법
  1. client와 session 차이 설명
  1. flask multipart/form-data 전송 받기
profile
누군가에게 빛이 되길...

0개의 댓글