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
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
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()
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
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
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
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
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