본문 바로가기
Restful API

[Restful API] 이미지를 S3에 업로드하는 API 만들기

by dong_su 2023. 12. 18.

 

AWS의 S3을 생성한 후(참고 : https://dongsu96.tistory.com/131 )

 

이미지를 내면 AWS의 S3에 업로드하게 하는 API 만들기

-> postman에서 Body의 form-data에 File 형식으로 바꿔서 Key값과 Value(사진)을 세팅해논다.

 

    def post(self) : 

        file = request.files.get("photo")
        
        if file is None :
            return {"error" : "파일을 업로드 하세요."}, 400
        
        # 파일명을 회사의 파일명 정책에 맞게 변경
        # 파일명은 유니크 해야 한다.

        current_time = datetime.now()

        new_file_name = current_time.isoformat().replace(":", "_") + ".jpg"

        # 유저가 올린 파일의 이름을 새로운 파일 이름으로 변경
        file.filename = new_file_name

        # S3에 업로드 하기 위해서는 AWS에서 제공하는 파이썬 라이브러리
        # boto3 라이브러리를 이용해야 한다.
        # boto3는 AWS의 모든 서비스를 파이썬 코드로 작성할 수 있는 라이브러리다.
        
        s3 = boto3.client("s3", aws_access_key_id = Config.AWS_ACCESS_KEY_ID,
                     aws_secret_access_key = Config.AWS_SECRET_ACCESS_KEY)
        
        try :
            s3.upload_fileobj(file, Config.S3_BUCKET, file.filename, 
                              ExtraArgs = {"ACL" : "public-read",
                                           "ContentType" : "image/jpeg"})
        except Exception as e :
            print(e)
            return {"error" : str(e)}, 500

        return {"result" : "success", "imgUrl" : Config.S3_LOCATION + file.filename}, 200

-> vscode에 위 코드 작성 후 실행한다.

 

-> 완료 후 imgUrl 부분을 복사해서 확인한다.


 

-> url에 복사해서 쳐도 확인 가능하다.

 

-> AWS의 S3에 해당 버킷에 들어가도 확인 가능하다.