드레:
코딩 뿌시기
드레:
전체 방문자
오늘
어제
  • 분류 전체보기 (268)
    • Python (74)
      • Python 기초 (42)
      • Numpy (8)
      • Pandas (22)
    • Machine Learning (31)
      • Machine Learning (1)
      • Deep Learning (27)
    • AWS (22)
      • RDS (3)
      • EC2 (9)
      • Lambda (8)
      • S3 (2)
    • MySQL (24)
    • Git (8)
    • Streamlit (12)
    • REST API (22)
    • Java (24)
    • Android (36)
    • Debugging (15)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 네이버 API
  • Lambda
  • aws s3
  • 안드로이드 스튜디오
  • Java
  • Ann
  • github
  • API
  • Retrofit2
  • serverless
  • 서버리스
  • AWS Lambda
  • Callback
  • tensorflow
  • flask
  • AWS
  • pandas
  • Streamlit
  • rest api
  • 딥러닝
  • JWT
  • EC2
  • 액션바
  • Python
  • fine tuning
  • Transfer Learning
  • GET
  • CNN
  • 깃이그노어
  • volley

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
드레:

코딩 뿌시기

AWS S3 - 파이썬 boto3로 파일 업로드
AWS/S3

AWS S3 - 파이썬 boto3로 파일 업로드

2023. 1. 12. 18:14

Flask를 사용하여 클라이언트로부터 파일을 받으면 AWS S3에 저장하는 API를 만들고자 한다.

먼저 boto3 라이브러리가 필요하다.

 

1. boto3

AWS에서 제공하는 Python용 AWS SDK

Boto3를 사용하면 Python 애플리케이션, 라이브러리 또는 스크립트를

Amazon S3, Amazon EC2, Amazon DynamoDB 등 AWS 서비스와 쉽게 통합할 수 있다.

공식문서: https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html

 

설치방법

pip install boto3

 

 

2. config.py 파일

Secure coding하기 위해 민감한 정보를 관리하는 파일

class Config :
    # AWS 관련 키
    ACCESS_KEY = IAM 사용자 access key
    SECRET_ACCESS = IAM 사용자 secret access key

    # S3 버킷
    S3_BUCKET = 버킷명
    # S3 Location
    S3_LOCATION = 'https://버킷명.지역명.amazonaws.com/'

 

 

3. 파일 업로드 API 코드

from flask import request
from flask_restful import Resource
from datetime import datetime
import boto3

from config import Config


class FileUploadResource(Resource):

    def post(self):

        # 1. 클라이언트로부터 데이터를 받아온다.
        #    request.files에 파일이 들어있다.
        if 'content' not in request.files:
            return{'error' : '파일을 업로드하세요'}, 400
        
        # print(request.files)

        file = request.files['content']
        # print(file)
        # print(file.content_type)

        # 클라이언트가 보낸 파일의 파일명을 
        # 변경시켜서 S3에 올려야, 유니크하게 파일을 관리할 수 있다.

        # 파일명을 유니크하게 만드는 방법
        current_time = datetime.now()
       
        new_file_name = current_time.isoformat().replace(':', '_') + '.' + file.content_type.split('/')[1]

        # 파일명을, 유니크한 이름으로 변경한다.
        # 클라이언트에서 보낸 파일명을 대체
        file.filename = new_file_name

        # S3에 파일을 업로드 한다.
        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}, 200

 

 

 

4. 포스트맨에서 테스트

 

 

 

5. S3에 업로드 됐는지 확인

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

AWS S3 - 버킷(스토리지) 만들기  (0) 2023.01.12
    'AWS/S3' 카테고리의 다른 글
    • AWS S3 - 버킷(스토리지) 만들기
    드레:
    드레:

    티스토리툴바