1. S3에 버킷 생성
AWS 의 S3 에 접속하여서 버킷을 생성한다.
- 객체 소유권에서 ACK 활성화 선택
- 모든 퍼플릭 억세스 차단 해제
- 버킷 생성


2. 코드 작성
- vs code 로 이동하여서, AWS S3 에 이미지를 업로드 하는 코드를 작성하였다.
- S3에 파일을 업로드 하는 라이브러리 boto3 를 설치한다.
pip install boto3
- 노출이 되면 안되는 정보들을 config 파일에 변수로 저장하였다.
from flask import request
from flask_jwt_extended import jwt_required
from flask_restful import Resource
from mysql.connector import Error
from flask_jwt_extended import get_jwt_identity
from mysql_connection import get_connection
from datetime import datetime
import boto3
from config import Config
class FileUploadResource(Resource) :
def post(self) :
# 1. 클라이언트로부터 데이터를 받아온다.
# request.files 에 파일이 들어있다.
if 'photo' not in request.files :
return {'error' : '파입 업로드 하세요.'}, 400
file = request.files['photo']
print(file)
# 클라이언트가 보낸 파일의 파일명을
# 변경시켜서 s3에 올려야, 유니크하게 파일을 관리할 수 있다.
# 파일명을 유니크하게 만드는 방법
current_time = datetime.now()
new_file_name = current_time.isoformat().replace(":", "_") + '.jpg'
print(new_file_name)
# 파일명을, 유니크한 이름으로 변경한다,
# 클라이언트에서 보낸 파일명을 대체!
file.filename = new_file_name
# S3 에 파일을 업로드 하면 된다.
# S3 에 파일 업로드 하는 라이브러리가 필요
# 따라서, boto3 라이브러리를 이용해서 업로드 한다.
# ( 참고. 라이브러리 설치는 pip install boto3 )
# 첫번째 파라미터에는 aws 의 서비스 이름을 써주면 된다. ex) ec2, s3 ...
client = boto3.client('s3',
aws_access_key_id = Config.ACCESS_KEY,
aws_secret_access_key= Config.SECRET_ACCESS)
try :
# 이미지 파일 변수, aws의 버킷명=> 보안상 config 파일에 변수로 저장, 파일명, 모두가 읽을 수 있게 그리고 파일타입을 파라미터로 넣어줌.
client.upload_fileobj(file, Config.S3_BUCKET, new_file_name, ExtraArgs= {'ACL':'public-read', 'ContentType' : file.content_type})
except Exception as e :
return {'error' : str(e)}, 500
return {'result' : 'success',
'imgUrl' : Config.S3_LOCATION + new_file_name}
3. Postman 으로 테스트
- 포스트맨으로 테스트를 한다.
- POST 로 설정
- Body - form data
- key 에는 코드에서 request 로 받은 변수 photo 를 적는다.
- Text,File 중 File 선택

위처럼 설정을 한 후, jpg 파일을 업로드하여 실행을 하였을 때의 결과이다.
아래에서 나온 imgUrl 을 선택하면 업로드한 사진이 결과값으로 리턴된다.

AWS 의 S3 로 이동하여, 맨 처음에 생성한 버킷으로 이동해보면 위에서 실행한 jpg 파일이 업로드 되어있는 것을 확인할 수 있다.

'AWS' 카테고리의 다른 글
| AWS Lambda 에서 Timeout 시간 늘리기 (0) | 2023.01.17 |
|---|---|
| numpy, pandas 라이브러리를 lambda layer 로 만드는 방법 (0) | 2023.01.11 |
| Flask API 를 lambda ( 서버리스 ) 에 배포하는 방법 (0) | 2023.01.11 |
| [Serverless] AWS 에서 IAM 을 이용하여 API 배포하기 (0) | 2023.01.10 |
| AWS EC2 - 리눅스(linux) 운영체제에서 한글 사용하기 (한글 깨짐) (0) | 2022.12.22 |