S3 file upload 예시 flask

2022. 3. 27. 00:35BackEnd/Flask (출처:시니어 개발) - 클론코딩

pip install boto3

 

s3.py 

import boto3

# reading .env file
#내가 아무렇게나 만든 예시 키들임 사용해도 작동안됨 

AWS_ACCESS_KEY = 'AEDGESDGEWADGg'
AWS_SECRET_ACCESS_KEY = 'wER!34dslakenrSAERAGAGWRQtnad_Dfawjr'

def s3_connection():
     '''
     s3 bucket에 연결
     :return: 연결된 s3 객체
     '''
     try:
          s3 = boto3.client(
               service_name='s3',
               #   맞는지 여쭈어 볼것
               region_name="ap-northeast-2",
               # access_key_id 와 aws_secret_access_key는 절대 올라가면 안됨 -> 재훈님 은 100만원 나왔음
               aws_access_key_id=AWS_ACCESS_KEY,
               aws_secret_access_key=AWS_SECRET_ACCESS_KEY,
          )
     except Exception as e:
          print(e)
          #    exit(ERROR_S3_CONNECTION_FAILED)
     else:
          print("s3 bucket connected!")
          return s3

# def s3_put_object(s3, bucket, filepath, access_key):

#      '''
#           s3 bucket에 지정 파일 업로드
#           :param s3: 연결된 s3 객체(boto3 client)
#           :param bucket: 버킷명
#           :param filepath: 파일 위치
#           :param access_key: 저장 파일명
#           :return: 성공 시 True, 실패 시 False 반환
#      '''

#      try:
#           s3.upload_file(filepath, bucket, access_key)
#      except Exception as e:
#           print(e)
#           return False
#      return 'success'

 

 

실제 api 로직

from s3 import s3_connection

s3 = s3_connection()

S3_URL = 'https://ksp-s3-bucket.s3.ap-northeast-2.amazonaws.com/'
BUCKET_NAME ='ksp-s3-bucket'


@app.route('/eventmodify', methods=['GET,POST'])
@cross_origin(origin='*',headers=['Content- Type','Authorization'])
def eventmodify():
    if request.methodb == 'POST':
        for i in 3:
            try:
                id = request.form['id']
                title  = request.form['title']
                subject = request.form['subject']
                updateDate = request.form['updateDate']
                event_image = request.files['file']
                startDate = request.form['startDate']
                endDate = request.form['endDate']
            except Exception as ex:
                print('================> eventmodify err')
                pass

        s3.put_object(
        Bucket = BUCKET_NAME,
            Body = event_image,
            Key = f'event_images/{event_image.filename}',
            ContentType = event_image.content_type)

        try:
            cur.execute("UPDATE eventweb SET title=%s,subject=%s,image=%s,startdate=%s,endDate=%s WHERE id = %s AND TO_CHAR(date,'YYYY-MM-DD') =%s",(title,subject,S3_URL+f'event_images/{event_image.filename}',startDate,endDate,id,updateDate))
            conn.commit()
        except Exception as ex:
            return json.dumps({'errMsg':'failed'}),401,{'ContentType':'application/json'}
            
        return json.dumps({"result": 'success'}), 200, {'ContentType':'application/json'}