왕현성
코딩발자취
왕현성
전체 방문자
오늘
어제
  • 코딩 (277)
    • Python (71)
    • Java (16)
    • MySQL (34)
    • 인공지능 (48)
      • 머신러닝 (16)
      • 딥러닝 (32)
    • 영상처리 (4)
    • Rest API (21)
    • Android Studio (25)
    • streamlit (13)
    • DevOps (22)
      • AWS (9)
      • PuTTY (5)
      • Git (4)
      • Serverless (2)
      • Docker (2)
    • IT 기술 용어 (6)
    • 디버깅 ( 오류 해결 과정 ) (17)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 영상처리역사
  • numpy
  • PIL
  • OpenCV
  • ckpt_file
  • pytorch
  • 비지도학습
  • 영상처리
  • tune()
  • UnboundLocalError
  • yolov8
  • labelme UnocodeDecodeError
  • matplotlib
  • unsupervised
  • 딥러닝
  • alibi-detection
  • 컴퓨터비전
  • labelme
  • maskimage
  • pip install labelme
  • ComputerVision
  • alibidetect
  • PYTHON
  • get_long_description
  • 의료이미징
  • TensorFlow
  • 영상기술
  • 기상탐사
  • imageprocessing
  • encoding='utf-8'

최근 댓글

최근 글

티스토리

250x250
hELLO · Designed By 정상우.
왕현성
DevOps/AWS

AWS S3 - 파이썬으로 이미지 파일 업로드하기

AWS S3 - 파이썬으로 이미지 파일 업로드하기
DevOps/AWS

AWS S3 - 파이썬으로 이미지 파일 업로드하기

2023. 1. 12. 15:59
728x90

1. 목표

  • S3에 이미지 파일을 업로드
  • RDS DB에 이미지의 URL과 내용 저장

2. boto3

파이썬용 AWS 소프트웨어 개발 킷

Amazon S3, EC2, DynamoDB 등 AWS 서비스와 쉽게 통합


3. boto3 라이브러리 설치

  • S3에 파일을 업로드하기 위해선 AWS 라이브러리가 필요
  • boto3 : AWS의 서비스를 프로그래밍 코드로 이용 할 수 있게 해주는 라이브러리
pip install boto3

4. Visual Studio Code

4.1. 메인 파일 : app.py

  • 기능 : API 구축, 환경변수 설정, 리소스 경로 생성
from flask import Flask
from flask_restful import Api
from config import Config
from flask_jwt_extended import JWTManager

from resources.image import FileUploadResource


app = Flask(__name__)
# 환경변수 셋팅
app.config.from_object(Config)

# JWT 매니저 초기화
jwt=JWTManager(app)



api = Api(app)
# 경로와 리소스 코드를 연결한다.
api.add_resource(FileUploadResource,'/upload')


if __name__ == '__main__' :
    app.run()

4.2. 추가 리소스 파일 : image.py

  • 기능
    • 파이썬 코드로 AWS 서비스 사용
    • 이미지 파일을 업로드하여 클라우드 서버(S3)에 저장
    • 이미지 url과 내용을 데이터베이스(RDS)에 저장
  • 기능 설계
    • 유저에게 파일을 받아 s3에 파일 업로드 (boto3 라이브러리 사용)
      • 파일이름은 현재 시간으로 생성 (파일 이름의 중복 방지)
    • 업로드한 파일 주소와 입력 받은 내용 DB에 저장
from flask import request
from flask_restful import Resource
from flask_jwt_extended import create_access_token,jwt_required,get_jwt
from flask_jwt_extended import create_access_token,jwt_required,get_jwt
from mysql.connector import Error
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

        client=boto3.client('s3',
                    aws_access_key_id = Config.ACCESS_KEY ,
                    aws_secret_access_key = Config.SECRET_ACCESS)
        
        try :
            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}

5. POSTMAN - 이미지 파일을 업로드하고 이미지에 대한 내용 저장

  • API 기능 : 사진과 내용 저장
  • POST - Body - form-data
    • KEY : VALUE 입력
      • photo : key 우측에 test -> file 변경하여 이미지 파일 선택

URI 테스트 결과

S3 확인 결과

'DevOps > AWS' 카테고리의 다른 글

AWS CloudWatch - Serverless Task timed out 해결 방법  (0) 2023.01.17
AWS S3 - 버킷 생성 방법  (0) 2023.01.12
AWS Lambda - Numpy,Pandas 라이브러리를 Lambda 레이어로 만드는 방법  (0) 2023.01.11
AWS & Serverless / 로컬에서 API 개발 후 수동 배포( sls deploy )하는 방법 총정리  (0) 2023.01.11
AWS Lambda - 로컬에서 설치한 라이브러리들을 설치하는 방법  (0) 2023.01.11
  • 1. 목표
  • 2. boto3
  • 3. boto3 라이브러리 설치
  • 4. Visual Studio Code
  • 5. POSTMAN - 이미지 파일을 업로드하고 이미지에 대한 내용 저장
'DevOps/AWS' 카테고리의 다른 글
  • AWS CloudWatch - Serverless Task timed out 해결 방법
  • AWS S3 - 버킷 생성 방법
  • AWS Lambda - Numpy,Pandas 라이브러리를 Lambda 레이어로 만드는 방법
  • AWS & Serverless / 로컬에서 API 개발 후 수동 배포( sls deploy )하는 방법 총정리
왕현성
왕현성
AI 머신비전 학습일지

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.