def create_excel(self, product_id_list, db_connection):
        """ 상품 정보 엑셀 파일 다운로드

        특정 아이디의 상품 정보를 엑셀 파일로 다운로드 한다.

        Author:
            김성진
        
        History:
            2020-11-04 (김성진): 초기생성
        """

        if len(product_id_list) > 0:
            s3 = get_s3_connection()

            fixed_products = self.product_dao.get_excel(
                product_id_list, db_connection)

            excel_file = pd.DataFrame({
                "대표이미지":
                products['thumbnail'],
                "상품명":
                products['name'],
                "상품번호":
                products['id'],
                "상품코드":
                products['code'],
                "셀러속성":
                products['type'],
                "셀러명":
                products['name_korean'],
                "판매가":
                products['sales_price'],
                "할인가": (
                    products['sales_price'],
                    -(products['sales_price'] * products['discount_rate'])),
                "판매여부":
                products['sales_status_id'],
                "진열여부":
                products['display_status_id'],
                "할인여부":
                products['discount_status_id']
            } for products in fixed_products)

            file_name = 'test.xlsx'
            file = f'../{file_name}'

            excel_file.to_excel(file, encoding='utf8')

            s3.upload_file(file, "brandi-3team", file_name)

            file_url = f'https://brandi-3team.s3.ap-northeast-2.amazonaws.com/{file_name}'

            return file_url
    def upload_event_image(self, request):
        """
        Args:
            request: 요청 값

        Returns:
            s3 버킷에 올라간 이미지 파일의 url(dictionary)

        Authors:
            [email protected] (윤희철)

        History:
            2020-04-02 ([email protected]): 초기 생성
        """

        data = {}
        image_file = request.files['imagefile']

        # 500MB 이하만 업로드 가능
        try:
            with Image.open(image_file) as pillow_obj:
                buffer = io.BytesIO()
                pillow_obj.save(buffer, pillow_obj.format)
                print(buffer.tell() / 1000)
                if buffer.tell() / 1000 > 500000:
                    return jsonify({'message': f'{buffer}'}), 400
        except:
            return jsonify({'message': 'INVALID_IMAGE1'}), 400

        uploaded_image_name = str(uuid.uuid4())
        s3 = get_s3_connection()
        s3.put_object(Body=image_file,
                      Bucket="brandi-intern",
                      Key=uploaded_image_name)
        uploaded_image_url = f'https://brandi-intern.s3.ap-northeast-2.amazonaws.com/{uploaded_image_name}'
        data["uploaded_image_url"] = uploaded_image_url

        return data
Esempio n. 3
0
    def product_detail_image_upload():
        """

        [상품관리 > 상품등록] - 엔드포인트 Function
        [POST] http://ip:5000/admin/product/detail-image

        Args:
            request.files
                product_detail_image_url : 상품 상세 image URL

        Returns:
            200 : 상품 상세 image URL
            400 : VALIDATION_ERROR, KEY_ERROR
            500 : NO_DATABASE_CONNECTION_ERROR

        Author:
            [email protected] (이곤호)

        History:
            2020-09-03 ([email protected]) : 초기 생성
            2020-09-04 ([email protected]) : CKEditor 양식에 맞춰 수정

        """

        try:
            # 상품의 상세 설명 이미지의 저장을 위한 S3 Connection Instance 생성
            s3_connection = get_s3_connection()
            image = request.files

            # 상품의 상세 설명 이미지의 S3 저장을 위한 Function 실행
            image_url_info = product_service.upload_detail_image(
                image, s3_connection)

            return jsonify(image_url_info), 200

        except Exception as e:
            return jsonify({'message': f"{e}"}), 400
Esempio n. 4
0
    def product_register(*args):
        """

        [상품관리 > 상품등록] - 엔드포인트 Function
        [POST] http://ip:5000/admin/product

        Args:
            request.form:
                mainCategoryId      : Main Category ID
                subCategoryId       : Sub Category ID
                sellYn              : 상품 판매여부 (Boolean)
                exhibitionYn        : 상품 진열여부 (Boolean)
                productName         : 상품이름
                simpleDescription   : 상품 한 줄 설명
                detailInformation   : 상품 상세 설명
                price               : 상품가격
                discountRate        : 상품 할인율
                discountStartDate   : 할인 시작일
                discountEndDate     : 할인 종료일
                minSalesQuantity    : 최소판매 수량
                maxSalesQuantity    : 최대판매 수량
                optionQuantity      : 옵션별 수량 List
                    {
                        colorId  : 상품 색상 id
                        sizeId   : 상품 사이즈 id
                        quantity : 상품 재고수량
                    }

            request.files
                product_image_(No.) : 상품이미지 파일(Number: 1-5)

        Returns:
            200 : SUCCESS, 상품등록 완료 message
            400 : VALIDATION_ERROR, KEY_ERROR
            500 : NO_DATABASE_CONNECTION_ERROR

        Author:
            [email protected] (이곤호)

        History:
            2020-08-25 ([email protected]) : 초기생성
            2020-08-26 ([email protected]) : controller, service, model role 재정의에 따른 함수수정
            2020-08-28 ([email protected]) : product_images, images 저장 기능추가
            2020-08-30 ([email protected]) : product option 별 재고수량 저장 기능추가
            2020-09-02 ([email protected]) : product_code column 추가에 따른 구조 수정
            2020-09-08 ([email protected]) : request Validation Check 추가
            2020-09-09 ([email protected]) : Validation Check 고도화

        """

        # finally error 발생 방지
        db_connection = None

        try:

            db_connection = get_connection()

            if db_connection:

                product_info = {
                    'mainCategoryId': args[0],
                    'subCategoryId': args[1],
                    'sellYn': args[2],
                    'exhibitionYn': args[3],
                    'productName': args[4],
                    'simpleDescription': args[5],
                    'detailInformation': args[6],
                    'price': args[7],
                    'discountRate': args[8],
                    'discountStartDate': args[9],
                    'discountEndDate': args[10],
                    'minSalesQuantity': args[11],
                    'maxSalesQuantity': args[12],
                    'optionQuantity': args[13]
                }

                if product_info['minSalesQuantity'] > product_info[
                        'maxSalesQuantity']:
                    product_info['minSalesQuantity'] = product_info[
                        'maxSalesQuantity']

                # 사이즈 별(Large, Medium, Small) 상품이미지 저장 위한 S3 Connection Instance 생성
                s3_connection = get_s3_connection()
                images = request.files

                # 상품정보를 DB에 저장하는 Function 실행
                product_id = product_service.create_product(
                    product_info, db_connection)

                # 상품이미지를 사이즈 별로 S3에 저장 및 URL을 DB에 Insert 하는 Function 실행
                product_service.upload_product_image(images, product_id,
                                                     s3_connection,
                                                     db_connection)

                # Exception이 발생하지 않았다면, commit 처리
                db_connection.commit()

                return jsonify({'message': 'SUCCESS'}), 200

        except pymysql.err.InternalError:
            db_connection.rollback()
            return jsonify({'message': 'DATABASE_DOES_NOT_EXIST'}), 500
        except pymysql.err.OperationalError:
            return jsonify({'message': 'DATABASE_AUTHORIZATION_DENIED'}), 500
        except pymysql.err.ProgrammingError:
            db_connection.rollback()
            return jsonify({'message': 'DATABASE_SYNTAX_ERROR'}), 500
        except pymysql.err.IntegrityError:
            db_connection.rollback()
            return jsonify({'message': 'FOREIGN_KEY_CONSTRAINT_ERROR'}), 500
        except pymysql.err.DataError:
            db_connection.rollback()
            return jsonify({'message': 'DATA_ERROR'}), 400
        except KeyError:
            db_connection.rollback()
            return jsonify({'message' 'KEY_ERROR'}), 400
        except json.decoder.JSONDecodeError as e:
            db_connection.rollback()
            return jsonify({'message':
                            'optionQuantity_VALUE_INVALID_JSON'}), 400
        except Exception as e:
            db_connection.rollback()
            return jsonify({'message': f'{e}'}), 500

        finally:
            if db_connection:
                db_connection.close()
Esempio n. 5
0
    def product_modify(*args):
        """

        [상품관리 > 상품등록] - 엔드포인트 Function
        [PUT] http://ip:5000/admin/product

        Args:
            request.form:
                mainCategoryId      : Main Category ID
                subCategoryId       : Sub Category ID
                sellYn              : 상품 판매여부 (Boolean)
                exhibitionYn        : 상품 진열여부 (Boolean)
                productName         : 상품이름
                simpleDescription   : 상품 한 줄 설명
                detailInformation   : 상품 상세 설명
                price               : 상품가격
                discountRate        : 상품 할인율
                discountStartDate   : 할인 시작일
                discountEndDate     : 할인 종료일
                minSalesQuantity    : 최소판매 수량
                maxSalesQuantity    : 최대판매 수량
                optionQuantity      : 옵션별 수량 List
                    {
                        colorId  : 상품 색상 id
                        sizeId   : 상품 사이즈 id
                        quantity : 상품 재고수량
                    }

            request.files
                product_image_(No.) : 상품이미지 파일(Number: 1-5)

        Returns:
            200 : SUCCESS, 상품등록 완료 message
            400 : VALIDATION_ERROR, KEY_ERROR
            500 : NO_DATABASE_CONNECTION_ERROR

        Author:
            [email protected] (이곤호)

        History:
            2020-09-06 ([email protected]) : 초기생성
            2020-09-09 ([email protected]) : Validation Check 고도화

        """

        # finally error 발생 방지
        db_connection = None

        try:

            db_connection = get_connection()

            if db_connection:

                product_id = args[0]
                product_info = {
                    'mainCategoryId': int(args[1]),
                    'subCategoryId': int(args[2]),
                    'sellYn': int(args[3]),
                    'exhibitionYn': int(args[4]),
                    'productName': args[5],
                    'simpleDescription': args[6],
                    'detailInformation': args[7],
                    'price': args[8],
                    'discountRate': int(args[9]),
                    'discountStartDate': args[10],
                    'discountEndDate': args[11],
                    'minSalesQuantity': int(args[12]),
                    'maxSalesQuantity': int(args[13]),
                    'optionQuantity': args[14]
                }

                if product_info['minSalesQuantity'] > product_info[
                        'maxSalesQuantity']:
                    product_info['minSalesQuantity'] = product_info[
                        'maxSalesQuantity']

                # DB 저장 내역과 비교를 위한 price value Decimal 변경
                product_info['price'] = round(Decimal(product_info['price']),
                                              2)

                # DB 저장 내역과 비교를 위한 discountStartDate, discountEndDate datetime 형태로 변경
                if product_info['discountStartDate'] is not None:
                    product_info['discountStartDate'] = datetime.strptime(
                        product_info['discountStartDate'], '%Y-%m-%d %H:%M')
                if product_info['discountEndDate'] is not None:
                    product_info['discountEndDate'] = datetime.strptime(
                        product_info['discountEndDate'], '%Y-%m-%d %H:%M')

                # 사이즈 별(Large, Medium, Small) 상품이미지 저장 위한 S3 Connection Instance 생성
                s3_connection = get_s3_connection()
                images = request.files

                # 상품정보를 DB에 저장하는 Function 실행
                product_service.update_product(product_id, product_info,
                                               db_connection)

                # 기존 상품 이미지(product_images, images)를 제거하고
                # 업데이트한 상품이미지를 사이즈 별로 S3에 저장 및 URL을 DB에 Insert 하는 Function 실행
                product_service.update_product_image(images, product_id,
                                                     s3_connection,
                                                     db_connection)

                # Exception이 발생하지 않았다면, commit 처리
                db_connection.commit()

                return jsonify({'message': 'SUCCESS'}), 200

        except pymysql.err.InternalError:
            db_connection.rollback()
            return jsonify({'message': 'DATABASE_DOES_NOT_EXIST'}), 500
        except pymysql.err.OperationalError:
            return jsonify({'message': 'DATABASE_AUTHORIZATION_DENIED'}), 500
        except pymysql.err.ProgrammingError:
            db_connection.rollback()
            return jsonify({'message': 'DATABASE_SYNTAX_ERROR'}), 500
        except pymysql.err.IntegrityError:
            db_connection.rollback()
            return jsonify({'message': 'FOREIGN_KEY_CONSTRAINT_ERROR'}), 500
        except pymysql.err.DataError:
            db_connection.rollback()
            return jsonify({'message': 'DATA_ERROR'}), 400
        except KeyError:
            db_connection.rollback()
            return jsonify({'message' 'KEY_ERROR'}), 400
        except json.decoder.JSONDecodeError as e:
            db_connection.rollback()
            return jsonify({'message':
                            'optionQuantity_VALUE_INVALID_JSON'}), 400
        except Exception as e:
            db_connection.rollback()
            return jsonify({'message': f'{e}'}), 500

        finally:
            if db_connection:
                db_connection.close()
    def upload_seller_image(self, request):
        """
        Args:
            request: 요청 값

        Returns:
            s3 버킷에 올라간 이미지 파일의 url(dictionary)

        Authors:
            [email protected] (윤희철)

        History:
            2020-04-02 ([email protected]): 초기 생성
        """

        data = {}
        # print([file for file in request.files])
        seller_profile_image = request.files.get('seller_profile_image', None)
        certificate_image = request.files.get('certificate_image', None)
        online_business_image = request.files.get('online_business_image',
                                                  None)
        background_image = request.files.get('background_image', None)
        # 파일의 존재여부 확인.
        if seller_profile_image and certificate_image and online_business_image:
            try:
                # 들어온 파일의 사이즈를 구함.
                image_file_size = os.fstat(
                    seller_profile_image.fileno()).st_size
                image_file_form = seller_profile_image.content_type

                # 이미지 파일이 아닌 다른형식의 파일이 들어오는 것을 차단.
                if not ('image' in image_file_form):
                    return jsonify({'message': 'INVALID_FILE1'})

                # 들어온 이미지 크기가 10MB보다 크면 request를 받지 않음.
                if image_file_size > 10485760:
                    return jsonify({'message': 'INVALID_IMAGE1'})

                uploaded_image_name = str(uuid.uuid4())
                s3 = get_s3_connection()
                s3.put_object(Body=seller_profile_image,
                              Bucket="brandi-intern",
                              Key=uploaded_image_name,
                              ContentType='image/jpeg')
                uploaded_image_url = f'https://brandi-intern.s3.ap-northeast-2.amazonaws.com/{uploaded_image_name}'
                data["profile_image_url"] = uploaded_image_url

            except Exception as e:
                print(f'Error : {e}')
                return jsonify({'message': 'INVALID_REQUEST1'})

            try:
                # 들어온 파일의 사이즈를 구함.
                image_file_size = os.fstat(certificate_image.fileno()).st_size
                image_file_form = certificate_image.content_type

                # 이미지 파일이 아닌 다른형식의 파일이 들어오는 것을 차단.
                if not ('image' in image_file_form):
                    return jsonify({'message': 'INVALID_FILE2'})

                # 들어온 이미지 크기가 10MB보다 크면 request를 받지 않음.
                if image_file_size > 10485760:
                    return jsonify({'message': 'INVALID_IMAGE2'})

                uploaded_image_name = str(uuid.uuid4())
                s3 = get_s3_connection()
                s3.put_object(Body=certificate_image,
                              Bucket="brandi-intern",
                              Key=uploaded_image_name,
                              ContentType='image/jpeg')
                uploaded_image_url = f'https://brandi-intern.s3.ap-northeast-2.amazonaws.com/{uploaded_image_name}'
                data["certificate_image_url"] = uploaded_image_url

            except Exception as e:
                print(f'Error : {e}')
                return jsonify({'message': 'INVALID_REQUEST2'})

            try:
                # 들어온 파일의 사이즈를 구함.
                image_file_size = os.fstat(
                    online_business_image.fileno()).st_size
                image_file_form = online_business_image.content_type

                # 이미지 파일이 아닌 다른형식의 파일이 들어오는 것을 차단.
                if not ('image' in image_file_form):
                    return jsonify({'message': 'INVALID_FILE3'})

                # 들어온 이미지 크기가 10MB보다 크면 request를 받지 않음.
                if image_file_size > 10485760:
                    return jsonify({'message': 'INVALID_IMAGE3'})

                uploaded_image_name = str(uuid.uuid4())
                s3 = get_s3_connection()
                s3.put_object(Body=online_business_image,
                              Bucket="brandi-intern",
                              Key=uploaded_image_name,
                              ContentType='image/jpeg')
                uploaded_image_url = f'https://brandi-intern.s3.ap-northeast-2.amazonaws.com/{uploaded_image_name}'
                data["online_business_image_url"] = uploaded_image_url

            except Exception as e:
                print(f'Error : {e}')
                return jsonify({'message': 'INVALID_REQUEST3'})

        else:
            return jsonify({'message': 'INVALID_REQUEST'}), 400

        if background_image:
            try:
                # 들어온 파일의 사이즈를 구함.
                image_file_size = os.fstat(background_image.fileno()).st_size
                image_file_form = background_image.content_type

                # 이미지 파일이 아닌 다른형식의 파일이 들어오는 것을 차단.
                if not ('image' in image_file_form):
                    return jsonify({'message': 'INVALID_FILE4'})

                # 들어온 이미지 크기가 10MB보다 크면 request를 받지 않음.
                if image_file_size > 10485760:
                    return jsonify({'message': 'INVALID_IMAGE4'})

                uploaded_image_name = str(uuid.uuid4())
                s3 = get_s3_connection()
                s3.put_object(Body=background_image,
                              Bucket="brandi-intern",
                              Key=uploaded_image_name,
                              ContentType='image/jpeg')
                uploaded_image_url = f'https://brandi-intern.s3.ap-northeast-2.amazonaws.com/{uploaded_image_name}'
                data["background_image_url"] = uploaded_image_url

            except Exception as e:
                print(f'Error : {e}')
                return jsonify({'message': 'INVALID_REQUEST4'})

        return data
    def upload_product_image(self, request):
        """
        Args:
            request: 요청 값

        Returns:
            리사이즈 성공시: s3 버킷에 올라간 이미지파일의 url(dictionary)
            리사이즈 실패시: error message, status code

        Authors:
            [email protected] (윤희철)

        History:
            2020-04-02 ([email protected]): 초기 생성
        """
        # s3 연결
        s3 = get_s3_connection()

        # 리턴값이 들어갈 리스트
        data = {
            'image_file_1': {},
            'image_file_2': {},
            'image_file_3': {},
            'image_file_4': {},
            'image_file_5': {}
        }

        # 파일의 존재여부 확인, 이미지 순서를 파일 이름으로 받음.
        image_file_1 = request.files.get('image_file_1', None)
        image_file_2 = request.files.get('image_file_2', None)
        image_file_3 = request.files.get('image_file_3', None)
        image_file_4 = request.files.get('image_file_4', None)
        image_file_5 = request.files.get('image_file_5', None)

        # 순서1번의 이미지파일 이 존재하면 업로드하고 url을 딕셔너리에 추가
        if image_file_1:
            try:
                # 들어온 파일의 사이즈와 확장자를 구함.
                image_file_size = os.fstat(image_file_1.fileno()).st_size
                image_file_form = image_file_1.content_type

                # 이미지 파일이 아닌 다른형식의 파일이 들어오는 것을 차단.
                if not ('image' in image_file_form):
                    return jsonify({'message': 'INVALID_FILE'})

                # 들어온 이미지 크기가 10MB보다 크면 request를 받지 않음.
                if image_file_size > 10485760:
                    return jsonify({'message': 'INVALID_IMAGE1'})

                # big_size 업로드
                big_size_buffer = self.resize_to_big(image_file_1)
                if not big_size_buffer:
                    return jsonify({"message": "INVALID_IMAGE33"}), 400
                s3.put_object(Body=big_size_buffer[0],
                              Bucket="brandi-intern",
                              Key=big_size_buffer[1],
                              ContentType='image/jpeg')
                big_size_url = f'https://brandi-intern.s3.ap-northeast-2.amazonaws.com/{big_size_buffer[1]}'
                data['image_file_1']['big_size_url'] = big_size_url
                data['image_file_1']['big_image_size_id'] = 1

                # medium_size 업로드
                medium_size_buffer = self.resize_to_medium(image_file_1)
                if not medium_size_buffer:
                    return jsonify({"message": "INVALID_IMAGE"}), 400
                s3.put_object(Body=medium_size_buffer[0],
                              Bucket="brandi-intern",
                              Key=medium_size_buffer[1],
                              ContentType='image/jpeg')
                medium_size_url = f'https://brandi-intern.s3.ap-northeast-2.amazonaws.com/{medium_size_buffer[1]}'
                data['image_file_1']['medium_size_url'] = medium_size_url
                data['image_file_1']['medium_image_size_id'] = 2

                # small_size 업로드
                small_size_buffer = self.resize_to_small(image_file_1)
                if not small_size_buffer:
                    return jsonify({"message": "INVALID_IMAGE"}), 400
                s3.put_object(Body=small_size_buffer[0],
                              Bucket="brandi-intern",
                              Key=small_size_buffer[1],
                              ContentType='image/jpeg')
                small_size_url = f'https://brandi-intern.s3.ap-northeast-2.amazonaws.com/{small_size_buffer[1]}'
                data['image_file_1']['small_size_url'] = small_size_url
                data['image_file_1']['small_image_size_id'] = 3

            except Exception as e:
                print(f'error1 : {e}')
                return jsonify({'message': 'INVALID_REQUEST'})

        # 순서2번의 이미지파일 이 존재하면 업로드하고 url을 딕셔너리에 추가
        if image_file_2:
            try:
                # 들어온 파일의 사이즈와 확장자를 구함.
                image_file_size = os.fstat(image_file_2.fileno()).st_size
                image_file_form = image_file_2.content_type

                # 이미지 파일이 아닌 다른형식의 파일이 들어오는 것을 차단.
                if not ('image' in image_file_form):
                    return jsonify({'message': 'INVALID_FILE'})

                # 들어온 이미지 크기가 10MB보다 크면 request를 받지 않음.
                if image_file_size > 10485760:
                    return jsonify({'message': 'INVALID_IMAGE1'})

                # big_size 업로드
                big_size_buffer = self.resize_to_big(image_file_2)
                if not big_size_buffer:
                    return jsonify({"message": "INVALID_IMAGE2"}), 400
                s3.put_object(Body=big_size_buffer[0],
                              Bucket="brandi-intern",
                              Key=big_size_buffer[1],
                              ContentType='image/jpeg')
                big_size_url = f'https://brandi-intern.s3.ap-northeast-2.amazonaws.com/{big_size_buffer[1]}'
                data['image_file_2']['big_size_url'] = big_size_url
                data['image_file_2']['big_image_size_id'] = 1

                # medium_size 업로드
                medium_size_buffer = self.resize_to_medium(image_file_2)
                if not medium_size_buffer:
                    return jsonify({"message": "INVALID_IMAGE33"}), 400
                s3.put_object(Body=medium_size_buffer[0],
                              Bucket="brandi-intern",
                              Key=medium_size_buffer[1],
                              ContentType='image/jpeg')
                medium_size_url = f'https://brandi-intern.s3.ap-northeast-2.amazonaws.com/{medium_size_buffer[1]}'
                data['image_file_2']['medium_size_url'] = medium_size_url
                data['image_file_2']['medium_image_size_id'] = 2

                # small_size 업로드
                small_size_buffer = self.resize_to_small(image_file_2)
                if not small_size_buffer:
                    return jsonify({"message": "INVALID_IMAGE"}), 400
                s3.put_object(Body=small_size_buffer[0],
                              Bucket="brandi-intern",
                              Key=small_size_buffer[1],
                              ContentType='image/jpeg')
                small_size_url = f'https://brandi-intern.s3.ap-northeast-2.amazonaws.com/{small_size_buffer[1]}'
                data['image_file_2']['small_size_url'] = small_size_url
                data['image_file_2']['small_image_size_id'] = 3

            except Exception as e:
                print(f'error1 : {e}')
                return jsonify({'message': 'INVALID_REQUEST'})

        # 순서3번의 이미지파일 이 존재하면 업로드하고 url을 딕셔너리에 추가
        if image_file_3:
            try:
                # 들어온 파일의 사이즈와 확장자를 구함.
                image_file_size = os.fstat(image_file_3.fileno()).st_size
                image_file_form = image_file_3.content_type

                # 이미지 파일이 아닌 다른형식의 파일이 들어오는 것을 차단.
                if not ('image' in image_file_form):
                    return jsonify({'message': 'INVALID_FILE'})

                # 들어온 이미지 크기가 10MB보다 크면 request를 받지 않음.
                if image_file_size > 10485760:
                    return jsonify({'message': 'INVALID_IMAGE1'})

                # big_size 업로드
                big_size_buffer = self.resize_to_big(image_file_3)
                if not big_size_buffer:
                    return jsonify({"message": "INVALID_IMAGE"}), 400
                s3.put_object(Body=big_size_buffer[0],
                              Bucket="brandi-intern",
                              Key=big_size_buffer[1],
                              ContentType='image/jpeg')
                big_size_url = f'https://brandi-intern.s3.ap-northeast-2.amazonaws.com/{big_size_buffer[1]}'
                data['image_file_3']['big_size_url'] = big_size_url
                data['image_file_3']['big_image_size_id'] = 1

                # medium_size 업로드
                medium_size_buffer = self.resize_to_medium(image_file_3)
                if not medium_size_buffer:
                    return jsonify({"message": "INVALID_IMAGE"}), 400
                s3.put_object(Body=medium_size_buffer[0],
                              Bucket="brandi-intern",
                              Key=medium_size_buffer[1],
                              ContentType='image/jpeg')
                medium_size_url = f'https://brandi-intern.s3.ap-northeast-2.amazonaws.com/{medium_size_buffer[1]}'
                data['image_file_3']['medium_size_url'] = medium_size_url
                data['image_file_3']['medium_image_size_id'] = 2

                # small_size 업로드
                small_size_buffer = self.resize_to_small(image_file_3)
                if not small_size_buffer:
                    return jsonify({"message": "INVALID_IMAGE"}), 400
                s3.put_object(Body=small_size_buffer[0],
                              Bucket="brandi-intern",
                              Key=small_size_buffer[1],
                              ContentType='image/jpeg')
                small_size_url = f'https://brandi-intern.s3.ap-northeast-2.amazonaws.com/{small_size_buffer[1]}'
                data['image_file_3']['small_size_url'] = small_size_url
                data['image_file_3']['small_image_size_id'] = 3

            except Exception as e:
                print(f'error1 : {e}')
                return jsonify({'message': 'INVALID_REQUEST'})

        # 순서4번의 이미지파일 이 존재하면 업로드하고 url을 딕셔너리에 추가
        if image_file_4:
            try:
                # 들어온 파일의 사이즈와 확장자를 구함.
                image_file_size = os.fstat(image_file_4.fileno()).st_size
                image_file_form = image_file_4.content_type

                # 이미지 파일이 아닌 다른형식의 파일이 들어오는 것을 차단.
                if not ('image' in image_file_form):
                    return jsonify({'message': 'INVALID_FILE'})

                # 들어온 이미지 크기가 10MB보다 크면 request를 받지 않음.
                if image_file_size > 10485760:
                    return jsonify({'message': 'INVALID_IMAGE1'})

                # big_size 업로드
                big_size_buffer = self.resize_to_big(image_file_4)
                if not big_size_buffer:
                    return jsonify({"message": "INVALID_IMAGE"}), 400
                s3.put_object(Body=big_size_buffer[0],
                              Bucket="brandi-intern",
                              Key=big_size_buffer[1],
                              ContentType='image/jpeg')
                big_size_url = f'https://brandi-intern.s3.ap-northeast-2.amazonaws.com/{big_size_buffer[1]}'
                data['image_file_4']['big_size_url'] = big_size_url
                data['image_file_4']['big_image_size_id'] = 1

                # medium_size 업로드
                medium_size_buffer = self.resize_to_medium(image_file_4)
                if not medium_size_buffer:
                    return jsonify({"message": "INVALID_IMAGE"}), 400
                s3.put_object(Body=medium_size_buffer[0],
                              Bucket="brandi-intern",
                              Key=medium_size_buffer[1],
                              ContentType='image/jpeg')
                medium_size_url = f'https://brandi-intern.s3.ap-northeast-2.amazonaws.com/{medium_size_buffer[1]}'
                data['image_file_4']['medium_size_url'] = medium_size_url
                data['image_file_4']['medium_image_size_id'] = 2

                # small_size 업로드
                small_size_buffer = self.resize_to_small(image_file_4)
                if not small_size_buffer:
                    return jsonify({"message": "INVALID_IMAGE"}), 400
                s3.put_object(Body=small_size_buffer[0],
                              Bucket="brandi-intern",
                              Key=small_size_buffer[1],
                              ContentType='image/jpeg')
                small_size_url = f'https://brandi-intern.s3.ap-northeast-2.amazonaws.com/{small_size_buffer[1]}'
                data['image_file_4']['small_size_url'] = small_size_url
                data['image_file_4']['small_image_size_id'] = 3

            except Exception as e:
                print(f'error1 : {e}')
                return jsonify({'message': 'INVALID_REQUEST'})

        # 순서5번의 이미지파일 이 존재하면 업로드하고 url을 딕셔너리에 추가
        if image_file_5:
            try:
                # 들어온 파일의 사이즈와 확장자를 구함.
                image_file_size = os.fstat(image_file_5.fileno()).st_size
                image_file_form = image_file_5.content_type

                # 이미지 파일이 아닌 다른형식의 파일이 들어오는 것을 차단.
                if not ('image' in image_file_form):
                    return jsonify({'message': 'INVALID_FILE'})

                # 들어온 이미지 크기가 10MB보다 크면 request를 받지 않음.
                if image_file_size > 10485760:
                    return jsonify({'message': 'INVALID_IMAGE1'})

                # big_size 업로드
                big_size_buffer = self.resize_to_big(image_file_5)
                if not big_size_buffer:
                    return jsonify({"message": "INVALID_IMAGE"}), 400
                s3.put_object(Body=big_size_buffer[0],
                              Bucket="brandi-intern",
                              Key=big_size_buffer[1],
                              ContentType='image/jpeg')
                big_size_url = f'https://brandi-intern.s3.ap-northeast-2.amazonaws.com/{big_size_buffer[1]}'
                data['image_file_5']['big_size_url'] = big_size_url
                data['image_file_5']['big_image_size_id'] = 1

                # medium_size 업로드
                medium_size_buffer = self.resize_to_medium(image_file_5)
                if not medium_size_buffer:
                    return jsonify({"message": "INVALID_IMAGE"}), 400
                s3.put_object(Body=medium_size_buffer[0],
                              Bucket="brandi-intern",
                              Key=medium_size_buffer[1],
                              ContentType='image/jpeg')
                medium_size_url = f'https://brandi-intern.s3.ap-northeast-2.amazonaws.com/{medium_size_buffer[1]}'
                data['image_file_5']['medium_size_url'] = medium_size_url
                data['image_file_5']['medium_image_size_id'] = 2

                # small_size 업로드
                small_size_buffer = self.resize_to_small(image_file_5)
                if not small_size_buffer:
                    return jsonify({"message": "INVALID_IMAGE"}), 400
                s3.put_object(Body=small_size_buffer[0],
                              Bucket="brandi-intern",
                              Key=small_size_buffer[1],
                              ContentType='image/jpeg')
                small_size_url = f'https://brandi-intern.s3.ap-northeast-2.amazonaws.com/{small_size_buffer[1]}'
                data['image_file_5']['small_size_url'] = small_size_url
                data['image_file_5']['small_image_size_id'] = 3

            except Exception as e:
                print(f'error1 : {e}')
                return jsonify({'message': 'INVALID_REQUEST'})

        return data
Esempio n. 8
0
    def upload_images(self, request):
        """ 공통으로 사용할 이미지 업로더
        셀러 / 기획전의 등록 / 수정 시 사용되는 이미지 업로더
        기존에 셀러용, 기획전용으로 나눠있던 것을 하나로 합쳐 공통으로 사용
        이미지파일 확장자별로 s3업로드(png, jpeg 만 가능).

        Args:
            request: 이미지 파일을 포함한 요청 값

        Returns:
            200: s3 버킷에 올라간 이미지 파일의 url (dictionary)

        Authors:
            [email protected] (이종민)
            [email protected] (윤희철)

        History:
            2020-04-12 ([email protected]): 초기 생성
            2020-04-14 ([email protected]): 이미지 확장자별 s3업로드 로직 추가, 파일 객체를 s3에 업로드 하도록 수정.
        """

        # s3에서 만들어진 url 을 반환할 dictionary 생성
        data = {}

        # request 로 받은 이미지 파일 리스트 키 값 저장
        image_name_list = list(request.files.keys())

        for name in image_name_list:
            image = request.files[name]

            # 들어온 파일의 사이즈를 구함.
            image_file_size = os.fstat(image.fileno()).st_size
            image_file_form = image.content_type

            # 이미지 파일이 아닌 다른형식의 파일이 들어오는 것을 차단.
            if not ('image' in image_file_form):
                return jsonify({'message': f'INVALID_{name}_FILE'}), 400

            # 들어온 이미지 크기가 10MB 보다 크면 request 를 받지 않음.
            if image_file_size > 10485760:
                return jsonify({'message': f'INVALID_{name}_IMAGE_SIZE'}), 400

            uploaded_image_name = str(uuid.uuid4())
            s3 = get_s3_connection()

            # s3에 올리는 과정에서 발생하는 애러를 잡아줌. 위에서 확인한 이미지파일 form 을 컨텐츠 타입으로 지정.
            try:
                s3.put_object(Body=image,
                              Bucket="brandi-intern",
                              Key=uploaded_image_name,
                              ContentType=image_file_form)

            except Exception as e:
                print({'error': e})
                return jsonify({'message': f'{name}_S3_UPLOAD_FAIL'}), 500

            # s3주소에 올라간 파일 이름을 넣어주어 리턴할 url 을 만들어줌.
            uploaded_image_url = f'https://brandi-intern.s3.ap-northeast-2.amazonaws.com/{uploaded_image_name}'

            # data dict 에 값 저장
            data[name] = uploaded_image_url

        return data
Esempio n. 9
0
    def upload_event_image(self, request):
        """ 기획전 이미지 파일을 업로드하고 url을 리턴하는 매서드
        request 의 files 안에 파일객체를 가져와서 값이 있으면 s3에 올리는 작업 수행.
        파일의 형식이 image 가 아닐 경우 이미지를 업로드 하지 않음.
        파일의 크기가 일정크기를 넘으면 업로드 하지 않음.
        boto3 라이브러리를 이용하여 s3에 업로드하고 url 을 리턴함.

        Args:
            request: 이미지 파일을 포함한 요청 값

        Returns:
            data: s3 버킷에 올라간 이미지 파일의 url(dictionary)
            400: 파일형식이 잘못된 경우, 파일 크기가 너무 큰 경우,
            500: s3에 업로드과정에서 애러가 난 경우.

        Authors:
            [email protected] (윤희철)

        History:
            2020-04-02 ([email protected]): 초기 생성
            2020-04-09 ([email protected]): image 파일 업로드 형식을 RESTful api 기준에 맞추어 모듈로 만들고 필요한 앱에서 import 해서 사용하는 방식 채택
            2020-04-11 ([email protected]): s3에 업로드 되는 과정에서 발생하는 애러 except 처리 추가.
        """

        data = {}

        banner_image = request.files.get('banner_image', None)
        detail_image = request.files.get('detail_image', None)
        # 필수로 들어와야 하는 파일의 존재여부 확인.
        if banner_image:

            # 들어온 파일의 사이즈를 구함.
            image_file_size = os.fstat(banner_image.fileno()).st_size
            image_file_form = banner_image.content_type

            # 이미지 파일이 아닌 다른형식의 파일이 들어오는 것을 차단.
            if not ('image' in image_file_form):
                return jsonify({'message': 'INVALID_FILE1'}), 400

            # 들어온 이미지 크기가 10MB보다 크면 request를 받지 않음.
            if image_file_size > 10485760:
                return jsonify({'message': 'INVALID_IMAGE1'}), 400

            uploaded_image_name = str(uuid.uuid4())
            s3 = get_s3_connection()

            # s3에 올리는 과정에서 발생하는 애러를 잡아줌
            try:
                s3.put_object(Body=banner_image,
                              Bucket="brandi-intern",
                              Key=uploaded_image_name,
                              ContentType='image/jpeg')

            except Exception as e:
                print(f'error1 : {e}')
                return jsonify({'message': 'S3_UPLOAD_FAIL'}), 500

            uploaded_image_url = f'https://brandi-intern.s3.ap-northeast-2.amazonaws.com/{uploaded_image_name}'
            data["s3_banner_image_url"] = uploaded_image_url

        if detail_image:

            # 들어온 파일의 사이즈를 구함.
            image_file_size = os.fstat(detail_image.fileno()).st_size
            image_file_form = detail_image.content_type

            # 이미지 파일이 아닌 다른형식의 파일이 들어오는 것을 차단.
            if not ('image' in image_file_form):
                return jsonify({'message': 'INVALID_FILE2'}), 400

            # 들어온 이미지 크기가 10MB보다 크면 request를 받지 않음.
            if image_file_size > 10485760:
                return jsonify({'message': 'INVALID_IMAGE2'}), 400

            uploaded_image_name = str(uuid.uuid4())
            s3 = get_s3_connection()

            # s3에 올리는 과정에서 발생하는 애러를 잡아줌
            try:
                s3.put_object(Body=detail_image,
                              Bucket="brandi-intern",
                              Key=uploaded_image_name,
                              ContentType='image/jpeg')

            except Exception as e:
                print(f'error1 : {e}')
                return jsonify({'message': 'S3_UPLOAD_FAIL'}), 500

            uploaded_image_url = f'https://brandi-intern.s3.ap-northeast-2.amazonaws.com/{uploaded_image_name}'
            data["s3_detail_image_url"] = uploaded_image_url

        return data
Esempio n. 10
0
    def upload_seller_image(self, request):
        """ 셀러 이미지 파일을 업로드하고 url 을 리턴하는 매서드
        들어올 것으로 예상되는 key 값을 지정하고 해당 key 로 들어오지 않으면 None 을 변수에 담아서 처리.
        파일의 형식이 image 가 아닐 경우 이미지를 업로드 하지 않음.
        파일의 크기가 일정크기를 넘으면 업로드 하지 않음.
        boto3 라이브러리를 이용하여 s3에 업로드하고 url 을 리턴함.

        Args:
            request: 이미지 파일을 포함한 요청 값

        Returns:
            data: s3 버킷에 올라간 이미지 파일의 url(dictionary)
            400: 파일형식이 잘못된 경우, 파일 크기가 너무 큰 경우,
            500: s3에 업로드과정에서 애러가 난 경우.

        Authors:
            [email protected] (윤희철)

        History:
            2020-04-02 ([email protected]): 초기 생성
            2020-04-09 ([email protected]): image 파일 업로드 형식을 RESTful api 기준에 맞추어 모듈로 만들고 필요한 앱에서 import 해서 사용하는 방식 채택
            2020-04-11 ([email protected]): s3에 업로드 되는 과정에서 발생하는 애러 except 처리 추가.
        """

        data = {}
        seller_profile_image = request.files.get('seller_profile_image', None)
        certificate_image = request.files.get('certificate_image', None)
        online_business_image = request.files.get('online_business_image',
                                                  None)
        background_image = request.files.get('background_image', None)

        # 필수로 들어와야 하는 파일의 존재여부 확인.
        if seller_profile_image:

            # 들어온 파일의 사이즈를 구함.
            image_file_size = os.fstat(seller_profile_image.fileno()).st_size
            image_file_form = seller_profile_image.content_type

            # 이미지 파일이 아닌 다른형식의 파일이 들어오는 것을 차단.
            if not ('image' in image_file_form):
                return jsonify({'message': 'INVALID_FILE1'}), 400

            # 들어온 이미지 크기가 10MB 보다 크면 request 를 받지 않음.
            if image_file_size > 10485760:
                return jsonify({'message': 'INVALID_IMAGE1'}), 400

            uploaded_image_name = str(uuid.uuid4())
            s3 = get_s3_connection()

            try:
                s3.put_object(Body=seller_profile_image,
                              Bucket="brandi-intern",
                              Key=uploaded_image_name,
                              ContentType='image/jpeg')

            except Exception as e:
                print(f'error1 : {e}')
                return jsonify({'message': 'S3_UPLOAD_FAIL'}), 500

            uploaded_image_url = f'https://brandi-intern.s3.ap-northeast-2.amazonaws.com/{uploaded_image_name}'
            data["s3_profile_image_url"] = uploaded_image_url

        if certificate_image:

            # 들어온 파일의 사이즈를 구함.
            image_file_size = os.fstat(certificate_image.fileno()).st_size
            image_file_form = certificate_image.content_type

            # 이미지 파일이 아닌 다른형식의 파일이 들어오는 것을 차단.
            if not ('image' in image_file_form):
                return jsonify({'message': 'INVALID_FILE2'}), 400

            # 들어온 이미지 크기가 10MB 보다 크면 request 를 받지 않음.
            if image_file_size > 10485760:
                return jsonify({'message': 'INVALID_IMAGE2'}), 400

            uploaded_image_name = str(uuid.uuid4())
            s3 = get_s3_connection()

            # s3에 올리는 과정에서 발생하는 애러를 잡아줌.
            try:
                s3.put_object(Body=certificate_image,
                              Bucket="brandi-intern",
                              Key=uploaded_image_name,
                              ContentType='image/jpeg')

            except Exception as e:
                print(f'error1 : {e}')
                return jsonify({'message': 'S3_UPLOAD_FAIL'}), 500

            uploaded_image_url = f'https://brandi-intern.s3.ap-northeast-2.amazonaws.com/{uploaded_image_name}'
            data["s3_certificate_image_url"] = uploaded_image_url

        if online_business_image:
            # 들어온 파일의 사이즈를 구함.
            image_file_size = os.fstat(online_business_image.fileno()).st_size
            image_file_form = online_business_image.content_type

            # 이미지 파일이 아닌 다른형식의 파일이 들어오는 것을 차단.
            if not ('image' in image_file_form):
                return jsonify({'message': 'INVALID_FILE3'}), 400

            # 들어온 이미지 크기가 10MB보다 크면 request를 받지 않음.
            if image_file_size > 10485760:
                return jsonify({'message': 'INVALID_IMAGE3'}), 400

            uploaded_image_name = str(uuid.uuid4())
            s3 = get_s3_connection()

            # s3에 올리는 과정에서 발생하는 애러를 잡아줌.
            try:
                s3.put_object(Body=online_business_image,
                              Bucket="brandi-intern",
                              Key=uploaded_image_name,
                              ContentType='image/jpeg')

            except Exception as e:
                print(f'error1 : {e}')
                return jsonify({'message': 'S3_UPLOAD_FAIL'}), 500

            uploaded_image_url = f'https://brandi-intern.s3.ap-northeast-2.amazonaws.com/{uploaded_image_name}'
            data["s3_online_business_image_url"] = uploaded_image_url

        if background_image:

            # 들어온 파일의 사이즈를 구함.
            image_file_size = os.fstat(background_image.fileno()).st_size
            image_file_form = background_image.content_type

            # 이미지 파일이 아닌 다른형식의 파일이 들어오는 것을 차단.
            if not ('image' in image_file_form):
                return jsonify({'message': 'INVALID_FILE4'}), 400

            # 들어온 이미지 크기가 10MB보다 크면 request를 받지 않음.
            if image_file_size > 10485760:
                return jsonify({'message': 'INVALID_IMAGE4'}), 400

            uploaded_image_name = str(uuid.uuid4())
            s3 = get_s3_connection()

            # s3에 올리는 과정에서 발생하는 애러를 잡아줌.
            try:
                s3.put_object(Body=background_image,
                              Bucket="brandi-intern",
                              Key=uploaded_image_name,
                              ContentType='image/jpeg')

            except Exception as e:
                print(f'error1 : {e}')
                return jsonify({'message': 'S3_UPLOAD_FAIL'}), 500

            uploaded_image_url = f'https://brandi-intern.s3.ap-northeast-2.amazonaws.com/{uploaded_image_name}'
            data["s3_background_image_url"] = uploaded_image_url

        return data
Esempio n. 11
0
    def upload_product_image(self, request):
        """ 상품 이미지 파일을 3가지 크기로 리사이즈 해서 s3에 업로드 하고 업로드한 이미지의 url, 사이즈를 리턴하는 함수.
        들어올 것으로 예상되는 key 값을 지정하고 해당 key로 들어오지 않으면 None 을 변수에 담아서 처리.
        파일의 형식이 image 가 아닐 경우 이미지를 업로드 하지 않음.
        파일의 크기가 일정크기를 넘으면 업로드 하지 않음.
        이미지가 들어오지 않아도 해당 이미지 순서에 있는 key는 존재하도록 설계

        Args:
            request: 상품 이미지 파일을 포함한 요청 값.

        Returns:
            data: s3 버킷에 올라간 이미지파일의 url(dictionary), size 를 포함한 딕셔너리
            400: 파일형식이 잘못된 경우, 파일 크기가 너무 큰 경우,
            500: s3에 업로드과정에서 애러가 난 경우.

        Authors:
            [email protected] (윤희철)

        History:
            2020-04-02 ([email protected]): 초기 생성
            2020-04-09 ([email protected],kr): RESTful api 형식에 맞추기 위해서 이미지 업로드 기능의 모듈화.
            2020-04-11 ([email protected]): s3에 업로드 되는 과정에서 발생하는 애러 except 처리 추가.
        """
        # s3 연결
        s3 = get_s3_connection()

        # 리턴값이 들어갈 리스트
        data = {
            'image_file_1': {},
            'image_file_2': {},
            'image_file_3': {},
            'image_file_4': {},
            'image_file_5': {}
        }

        # 파일의 존재여부 확인, 이미지 순서를 파일 이름으로 받음.
        image_file_1 = request.files.get('image_file_1', None)
        image_file_2 = request.files.get('image_file_2', None)
        image_file_3 = request.files.get('image_file_3', None)
        image_file_4 = request.files.get('image_file_4', None)
        image_file_5 = request.files.get('image_file_5', None)

        # 순서1번의 이미지파일 이 존재하면 업로드하고 url 을 딕셔너리에 추가
        if image_file_1:
            # 들어온 파일의 사이즈와 확장자를 구함.
            image_file_size = os.fstat(image_file_1.fileno()).st_size
            image_file_form = image_file_1.content_type

            # 이미지 파일이 아닌 다른형식의 파일이 들어오는 것을 차단.
            if not ('image' in image_file_form):
                return jsonify({'message': 'INVALID_FILE_FORM'}), 400

            # 들어온 이미지 크기가 10MB 보다 크면 request 를 받지 않음.
            if image_file_size > 1000000:
                return jsonify({'message': 'INVALID_IMAGE_SIZE'}), 400

            # big_size 업로드
            big_size_buffer = self.resize_to_big(image_file_1)
            if not big_size_buffer:
                return jsonify({"message": "RESIZE_FAIL"}), 400

            try:
                s3.put_object(Body=big_size_buffer[0],
                              Bucket="brandi-intern",
                              Key=big_size_buffer[1],
                              ContentType='image/jpeg')

            except Exception as e:
                print(f'error: {e}')
                return jsonify({'message': 'INVALID_REQUEST'}), 400

            big_size_url = f'https://brandi-intern.s3.ap-northeast-2.amazonaws.com/{big_size_buffer[1]}'
            data['image_file_1']['big_size_url'] = big_size_url
            data['image_file_1']['big_image_size_id'] = 1

            # medium_size 업로드
            medium_size_buffer = self.resize_to_medium(image_file_1)
            if not medium_size_buffer:
                return jsonify({"message": "RESIZE_FAIL"}), 400

            try:
                s3.put_object(Body=medium_size_buffer[0],
                              Bucket="brandi-intern",
                              Key=medium_size_buffer[1],
                              ContentType='image/jpeg')

            except Exception as e:
                print(f'error: {e}')
                return jsonify({'message': 'INVALID_REQUEST'}), 400

            medium_size_url = f'https://brandi-intern.s3.ap-northeast-2.amazonaws.com/{medium_size_buffer[1]}'
            data['image_file_1']['medium_size_url'] = medium_size_url
            data['image_file_1']['medium_image_size_id'] = 2

            # small_size 업로드
            small_size_buffer = self.resize_to_small(image_file_1)
            if not small_size_buffer:
                return jsonify({"message": "RESIZE_FAIL"}), 400

            try:
                s3.put_object(Body=small_size_buffer[0],
                              Bucket="brandi-intern",
                              Key=small_size_buffer[1],
                              ContentType='image/jpeg')

            except Exception as e:
                print(f'error: {e}')
                return jsonify({'message': 'INVALID_REQUEST'}), 400

            small_size_url = f'https://brandi-intern.s3.ap-northeast-2.amazonaws.com/{small_size_buffer[1]}'
            data['image_file_1']['small_size_url'] = small_size_url
            data['image_file_1']['small_image_size_id'] = 3

        # 순서2번의 이미지파일 이 존재하면 업로드하고 url 을 딕셔너리에 추가
        if image_file_2:
            # 들어온 파일의 사이즈와 확장자를 구함.
            image_file_size = os.fstat(image_file_2.fileno()).st_size
            image_file_form = image_file_2.content_type

            # 이미지 파일이 아닌 다른형식의 파일이 들어오는 것을 차단.
            if not ('image' in image_file_form):
                return jsonify({'message': 'INVALID_FILE_FORM'})

            # 들어온 이미지 크기가 10MB 보다 크면 request 를 받지 않음.
            if image_file_size > 10485760:
                return jsonify({'message': 'INVALID_IMAGE_SIZE'})

            # big_size 업로드
            big_size_buffer = self.resize_to_big(image_file_2)
            if not big_size_buffer:
                return jsonify({"message": "RESIZE_FAIL"}), 400

            try:
                s3.put_object(Body=big_size_buffer[0],
                              Bucket="brandi-intern",
                              Key=big_size_buffer[1],
                              ContentType='image/jpeg')

            except Exception as e:
                print(f'error1 : {e}')
                return jsonify({'message': 'S3_UPLOAD_FAIL'}), 500

            big_size_url = f'https://brandi-intern.s3.ap-northeast-2.amazonaws.com/{big_size_buffer[1]}'
            data['image_file_2']['big_size_url'] = big_size_url
            data['image_file_2']['big_image_size_id'] = 1

            # medium_size 업로드
            medium_size_buffer = self.resize_to_medium(image_file_2)
            if not medium_size_buffer:
                return jsonify({"message": "RESIZE_FAIL"}), 400

            try:
                s3.put_object(Body=medium_size_buffer[0],
                              Bucket="brandi-intern",
                              Key=medium_size_buffer[1],
                              ContentType='image/jpeg')

            except Exception as e:
                print(f'error1 : {e}')
                return jsonify({'message': 'S3_UPLOAD_FAIL'}), 500

            medium_size_url = f'https://brandi-intern.s3.ap-northeast-2.amazonaws.com/{medium_size_buffer[1]}'
            data['image_file_2']['medium_size_url'] = medium_size_url
            data['image_file_2']['medium_image_size_id'] = 2

            # small_size 업로드
            small_size_buffer = self.resize_to_small(image_file_2)
            if not small_size_buffer:
                return jsonify({"message": "RESIZE_FAIL"}), 400

            try:
                s3.put_object(Body=small_size_buffer[0],
                              Bucket="brandi-intern",
                              Key=small_size_buffer[1],
                              ContentType='image/jpeg')

            except Exception as e:
                print(f'error1 : {e}')
                return jsonify({'message': 'S3_UPLOAD_FAIL'}), 500

            small_size_url = f'https://brandi-intern.s3.ap-northeast-2.amazonaws.com/{small_size_buffer[1]}'
            data['image_file_2']['small_size_url'] = small_size_url
            data['image_file_2']['small_image_size_id'] = 3

        # 순서3번의 이미지파일 이 존재하면 업로드하고 url 을 딕셔너리에 추가
        if image_file_3:
            # 들어온 파일의 사이즈와 확장자를 구함.
            image_file_size = os.fstat(image_file_3.fileno()).st_size
            image_file_form = image_file_3.content_type

            # 이미지 파일이 아닌 다른형식의 파일이 들어오는 것을 차단.
            if not ('image' in image_file_form):
                return jsonify({'message': 'INVALID_FILE_FORM'})

            # 들어온 이미지 크기가 10MB 보다 크면 request 를 받지 않음.
            if image_file_size > 10485760:
                return jsonify({'message': 'INVALID_IMAGE_SIZE'})

            # big_size 업로드
            big_size_buffer = self.resize_to_big(image_file_3)
            if not big_size_buffer:
                return jsonify({"message": "RESIZE_FAIL"}), 400

            try:
                s3.put_object(Body=big_size_buffer[0],
                              Bucket="brandi-intern",
                              Key=big_size_buffer[1],
                              ContentType='image/jpeg')

            except Exception as e:
                print(f'error1 : {e}')
                return jsonify({'message': 'S3_UPLOAD_FAIL'}), 500

            big_size_url = f'https://brandi-intern.s3.ap-northeast-2.amazonaws.com/{big_size_buffer[1]}'
            data['image_file_3']['big_size_url'] = big_size_url
            data['image_file_3']['big_image_size_id'] = 1

            # medium_size 업로드
            medium_size_buffer = self.resize_to_medium(image_file_3)
            if not medium_size_buffer:
                return jsonify({"message": "RESIZE_FAIL"}), 400

            try:
                s3.put_object(Body=medium_size_buffer[0],
                              Bucket="brandi-intern",
                              Key=medium_size_buffer[1],
                              ContentType='image/jpeg')

            except Exception as e:
                print(f'error1 : {e}')
                return jsonify({'message': 'S3_UPLOAD_FAIL'}), 500

            medium_size_url = f'https://brandi-intern.s3.ap-northeast-2.amazonaws.com/{medium_size_buffer[1]}'
            data['image_file_3']['medium_size_url'] = medium_size_url
            data['image_file_3']['medium_image_size_id'] = 2

            # small_size 업로드
            small_size_buffer = self.resize_to_small(image_file_3)
            if not small_size_buffer:
                return jsonify({"message": "RESIZE_FAIL"}), 400

            try:
                s3.put_object(Body=small_size_buffer[0],
                              Bucket="brandi-intern",
                              Key=small_size_buffer[1],
                              ContentType='image/jpeg')

            except Exception as e:
                print(f'error1 : {e}')
                return jsonify({'message': 'S3_UPLOAD_FAIL'}), 500

            small_size_url = f'https://brandi-intern.s3.ap-northeast-2.amazonaws.com/{small_size_buffer[1]}'
            data['image_file_3']['small_size_url'] = small_size_url
            data['image_file_3']['small_image_size_id'] = 3

        # 순서4번의 이미지파일 이 존재하면 업로드하고 url 을 딕셔너리에 추가
        if image_file_4:
            # 들어온 파일의 사이즈와 확장자를 구함.
            image_file_size = os.fstat(image_file_4.fileno()).st_size
            image_file_form = image_file_4.content_type

            # 이미지 파일이 아닌 다른형식의 파일이 들어오는 것을 차단.
            if not ('image' in image_file_form):
                return jsonify({'message': 'INVALID_FILE_FORM'}), 400

            # 들어온 이미지 크기가 10MB 보다 크면 request 를 받지 않음.
            if image_file_size > 10485760:
                return jsonify({'message': 'INVALID_IMAGE_SIZE'}), 400

            # big_size 업로드
            big_size_buffer = self.resize_to_big(image_file_4)
            if not big_size_buffer:
                return jsonify({"message": "RESIZE_FAIL"}), 400

            try:
                s3.put_object(Body=big_size_buffer[0],
                              Bucket="brandi-intern",
                              Key=big_size_buffer[1],
                              ContentType='image/jpeg')

            except Exception as e:
                print(f'error: {e}')
                return jsonify({'message': 'INVALID_REQUEST4'}), 400

            big_size_url = f'https://brandi-intern.s3.ap-northeast-2.amazonaws.com/{big_size_buffer[1]}'
            data['image_file_4']['big_size_url'] = big_size_url
            data['image_file_4']['big_image_size_id'] = 1

            # medium_size 업로드
            medium_size_buffer = self.resize_to_medium(image_file_4)
            if not medium_size_buffer:
                return jsonify({"message": "RESIZE_FAIL"}), 400

            try:
                s3.put_object(Body=medium_size_buffer[0],
                              Bucket="brandi-intern",
                              Key=medium_size_buffer[1],
                              ContentType='image/jpeg')

            except Exception as e:
                print(f'error: {e}')
                return jsonify({'message': 'INVALID_REQUEST'}), 400

            medium_size_url = f'https://brandi-intern.s3.ap-northeast-2.amazonaws.com/{medium_size_buffer[1]}'
            data['image_file_4']['medium_size_url'] = medium_size_url
            data['image_file_4']['medium_image_size_id'] = 2

            # small_size 업로드
            small_size_buffer = self.resize_to_small(image_file_4)
            if not small_size_buffer:
                return jsonify({"message": "RESIZE_FAIL"}), 400

            try:
                s3.put_object(Body=small_size_buffer[0],
                              Bucket="brandi-intern",
                              Key=small_size_buffer[1],
                              ContentType='image/jpeg')

            except Exception as e:
                print(f'error: {e}')
                return jsonify({'message': 'INVALID_REQUEST'}), 400

            small_size_url = f'https://brandi-intern.s3.ap-northeast-2.amazonaws.com/{small_size_buffer[1]}'
            data['image_file_4']['small_size_url'] = small_size_url
            data['image_file_4']['small_image_size_id'] = 3

        # 순서5번의 이미지파일 이 존재하면 업로드하고 url 을 딕셔너리에 추가
        if image_file_5:
            # 들어온 파일의 사이즈와 확장자를 구함.
            image_file_size = os.fstat(image_file_5.fileno()).st_size
            image_file_form = image_file_5.content_type

            # 이미지 파일이 아닌 다른형식의 파일이 들어오는 것을 차단.
            if not ('image' in image_file_form):
                return jsonify({'message': 'INVALID_FILE_FORM'})

            # 들어온 이미지 크기가 10MB 보다 크면 request 를 받지 않음.
            if image_file_size > 10485760:
                return jsonify({'message': 'INVALID_IMAGE_SIZE'})

            # big_size 업로드
            big_size_buffer = self.resize_to_big(image_file_5)
            if not big_size_buffer:
                return jsonify({"message": "RESIZE_FAIL"}), 400

            try:
                s3.put_object(Body=big_size_buffer[0],
                              Bucket="brandi-intern",
                              Key=big_size_buffer[1],
                              ContentType='image/jpeg')

            except Exception as e:
                print(f'error1 : {e}')
                return jsonify({'message': 'S3_UPLOAD_FAIL'}), 500

            big_size_url = f'https://brandi-intern.s3.ap-northeast-2.amazonaws.com/{big_size_buffer[1]}'
            data['image_file_5']['big_size_url'] = big_size_url
            data['image_file_5']['big_image_size_id'] = 1

            # medium_size 업로드
            medium_size_buffer = self.resize_to_medium(image_file_5)
            if not medium_size_buffer:
                return jsonify({"message": "RESIZE_FAIL"}), 400

            try:
                s3.put_object(Body=medium_size_buffer[0],
                              Bucket="brandi-intern",
                              Key=medium_size_buffer[1],
                              ContentType='image/jpeg')

            except Exception as e:
                print(f'error1 : {e}')
                return jsonify({'message': 'S3_UPLOAD_FAIL'}), 500

            medium_size_url = f'https://brandi-intern.s3.ap-northeast-2.amazonaws.com/{medium_size_buffer[1]}'
            data['image_file_5']['medium_size_url'] = medium_size_url
            data['image_file_5']['medium_image_size_id'] = 2

            # small_size 업로드
            small_size_buffer = self.resize_to_small(image_file_5)
            if not small_size_buffer:
                return jsonify({"message": "RESIZE_FAIL"}), 400

            try:
                s3.put_object(Body=small_size_buffer[0],
                              Bucket="brandi-intern",
                              Key=small_size_buffer[1],
                              ContentType='image/jpeg')

            except Exception as e:
                print(f'error1 : {e}')
                return jsonify({'message': 'S3_UPLOAD_FAIL'}), 500

            small_size_url = f'https://brandi-intern.s3.ap-northeast-2.amazonaws.com/{small_size_buffer[1]}'
            data['image_file_5']['small_size_url'] = small_size_url
            data['image_file_5']['small_image_size_id'] = 3

        return data