boto3 로 아마존 AWS의 버킷 s3 파일 업로드
1. AWS 버킷 생성
boto3 라이브러리 설치
$ pip install boto3
2. 서버에 코드 작성
import boto3
from config import Config
필요한 라이브러리 호출
app.py
from flask import Flask
from flask_jwt_extended import JWTManager
from flask_restful import Api
from config import Config
from resources.image import FileUploadResource
from resources.posting import PostingResource
app = Flask(__name__)
# 환경변수 셋팅
app.config.from_object(Config)
# JWT 토큰 라이브러리 만들기
jwt = JWTManager(app)
api = Api(app)
# 경로와 리소스(API 코드)를 연결한다.
api.add_resource(FileUploadResource, '/upload')
if __name__=="__main__" :
app.run()
image.py
from datetime import datetime
from http import HTTPStatus
from os import access
from flask import request
from flask_jwt_extended import create_access_token, get_jwt, get_jwt_identity, jwt_required
from flask_restful import Resource
from mysql.connector.errors import Error
import boto3
from config import Config
class FileUploadResource(Resource) :
def post(self) :
# 1. 클라이언트로부터 데이터를 받아온다.
# request.files 에 파일을 받아온다.
# 따라서 파일이 없는 상태로 API 가 호출되면, 에러메세지를
# 클라이언트에 응답해주자.
# photo란, 클라이언트에서 보내는 key !!
if 'photo' not in request.files:
return {'error' : '파일을 업로드 하세요'}, 400
# 클라이언트로부터 파일을 받아온다.
file = request.files['photo']
# 파일명을 우리가 변경해 준다.
# 파일명은, 유니크하게 만들어야 한다.
current_time = datetime.now()
new_file_name = current_time.isoformat().replace(':', '_') + '.jpg'
# 유저가 올린 파일의 이름을, 내가 만든 파일명으로 변경
file.filename = new_file_name
# S3 에 업로드 하면 된다.
# AWS 의 라이브러리를 사용해야 한다.
# 이 파이썬 라이브러리가 boto3 라이브러리다!
# boto3 라이브러리 설치
# pip install boto3
s3 = boto3.client('s3',
aws_access_key_id = Config.ACCESS_KEY,
aws_secret_access_key = Config.SECRET_ACCESS)
try :
s3.upload_fileobj(file,
Config.S3_BUCKET,
file.filename,
ExtraArgs = {'ACL':'public-read', 'ContentType':file.content_type} )
except Exception as e :
return {'error' : str(e)}, 500
return {'result' : 'success',
'imgUrl' : Config.S3_LOCATION + file.filename}
3. 포스트맨 API 생성
사진 업로드하는 API 만들기
POST : {{url}}/upload
format-data, file 선택
내컴퓨터에서 업로드할 사진 선택
[SEND] 눌러서 확인한다.
힐링아무의 코딩일기 힐코딩!
'Back End > API' 카테고리의 다른 글
API/ Serverless Framework 를 이용한 Github 코드를 AWS에 배포하기(CI/CD) (0) | 2022.06.29 |
---|---|
API/ 포스트맨(POSTMAN)으로 API 테스트 사용법 (0) | 2022.06.17 |
API/ Python Flask 에서 Resource 클래스를 이용한 API 서버 개발 방법 (0) | 2022.06.17 |
댓글