def edit_profile_image(): user_id = session["id"] user = User.query.filter_by(id=user_id).first() if request.method == "POST": uploaded_file = request.files.getlist("file")[0] image_url = save_image(uploaded_file, user.uuid, "profile_img") if image_url == "NOT_ALLOWED": return {"error": "Uploaded file has not allowed format"}, 404 elif image_url == "NOT_SAVED": return {"error": "Something went wrong. Uploaded image has not been saved"}, 404 user.image_url = image_url db.session.add(user) db.session.commit() return {"msg": "Image uploaded", "image_url": user.image_url}, 200 elif request.method == "DELETE": url = user.image_url path = os.path.join( current_app.config["USERS_FOLDER"], user.uuid, url.split('/')[-1]) try: os.remove(path) except: print( f"File {url.split('/')[-1]} in folder {user.uuid} has not been deleted") user.image_url = current_app.config['PROFILE_IMAGE'] db.session.add(user) db.session.commit() return {"msg": "Image deleted", "image_url": user.image_url}, 200
def save_images(self, vendor=None): vendor = vendor if vendor else current_user for image_field in self.image_fields: if getattr(self, image_field).data: image, image_hash = save_image(vendor.id, 'vendor', getattr(self, image_field), IO(b64decode(getattr(self, image_field).data[23:]))) setattr(vendor, image_field, image) db.session.add(vendor) db.session.commit()
def revoke(self): contract, image_hash = save_image(current_user.id, 'vendor', self.contract, self.contract.data.stream) revocation = DistributorRevocation.query.filter_by(distributor_id=self.distributor.id).limit(1).first() if not revocation: revocation = DistributorRevocation(self.distributor.id, contract) else: revocation.contract = contract revocation.pending = True db.session.add(revocation) db.session.commit()
def update_vendor_setting(self, vendor): vendor.introduction = self.introduction.data vendor.telephone = self.telephone.data vendor.contact = self.contact.data vendor.address.address = self.address.data # vendor.address.cn_id = self.area_cn_id.data if vendor.email != self.email.data: vendor.email = self.email.data vendor.email_confirmed = False if self.logo.data: logo, image_hash = save_image(vendor.id, 'vendor', self.logo, self.logo.data.stream) vendor.logo = logo db.session.add(vendor) db.session.add(vendor.address) db.session.commit()
def add_item_image(self): image_path, image_hash = save_image(self.item_id.data, 'item', self.file, self.file.data.stream) item_image = ItemImage(self.item_id.data, image_path, image_hash, self.file.data.filename[:30], 999) # 新上传的图片默认在最后 db.session.add(item_image) db.session.commit() return {'hash': item_image.hash, 'url': item_image.url, 'created': item_image.created}
def edit_product_images(product_id): user_id = session["id"] product = Product.query.filter_by(id=product_id).first() user = product.user if user_id != product.user_id: return {}, 403 if request.method == "POST": total_images = product.images.count() if total_images >= 4: return {"error": "You already have 4 images saved. Delete them first."}, 404 count_uploaded = 0 rejected = [] for uploaded_file in request.files.getlist("file"): if total_images == 4: return {"msg": f"Every product can have up to 4 images. Uploaded {count_uploaded} images"}, 200 image_name = f"{product.name}-{product_id}-{str(uuid4())[:8]}" image_url = save_image(uploaded_file, user.uuid, image_name) if (image_url == "NOT_ALLOWED" or image_url == "NOT_SAVED"): rejected.append(uploaded_file.filename) continue image = Image( product_id=product_id, image_url=image_url) db.session.add(image) db.session.commit() if total_images == 0: product.primary_image = image_url db.session.add(product) db.session.commit() count_uploaded += 1 total_images += 1 msg = f"{count_uploaded} {'file has' if count_uploaded == 1 else 'files have'} been uploaded." if len(rejected) > 0: msg += f" {len(rejected)} {'file was rejected: ' if len(rejected) == 1 else 'files were rejected: '} " if count_uploaded == 0: return {}, 404 for r in rejected: msg += f"{r} " return {"msg": msg}, 200 if request.method == "DELETE": image_id = request.json.get("image_id", None) uuid = product.user.uuid if image_id is None: return {}, 404 image = product.images.filter_by(id=image_id).first() if image is None: return {}, 404 total_images = product.images.count() if total_images == 1: product.primary_image = "" elif total_images > 1 and product.primary_image == image.image_url: new_prim_image = product.images.first() product.primary_image = new_prim_image.image_url db.session.add(product) db.session.commit() db.session.delete(image) db.session.commit() image_name = image.image_url.split('/')[-1] to_delete = os.path.join( current_app.config["USERS_FOLDER"], uuid, image_name) try: os.remove(to_delete) except: print( f"File {image_name} in {uuid} folder has not been deleted") return {"msg": "The image has been deleted"}, 200