def save_thumbnail(picture_id): """通过图片ID,查找图片,生产略缩图,存储本地,然后存储数据库""" pub_picture = PubPicture.query.filter(PubPicture.id == picture_id).first() save_path = pub_picture.base_path + pub_picture.rel_path + "/" picture = save_path + pub_picture.pic_name im = Image.open(picture) im.thumbnail((256, 256)) thumbnail_name = time_file_name(pub_picture.upload_name, sign="nail") + ".jpeg" im.save(save_path + thumbnail_name, "jpeg") pub_picture.thumbnail = thumbnail_name im_250 = Image.open(picture) im_250.thumbnail((2000, 250)) thumbnail_250 = time_file_name(pub_picture.upload_name, sign="nail") + ".jpeg" im_250.save(save_path + thumbnail_250, "jpeg") pub_picture.thumbnail_250 = thumbnail_250 db.commit()
def save_activity_thumbnail(picture_id): """通过图片ID,查找图片,生产略缩图,存储本地,然后存储数据库""" activity_picture = ActivityPicture.query.filter(ActivityPicture.id == picture_id).first() save_path = activity_picture.base_path + activity_picture.rel_path + '/' picture = save_path + activity_picture.pic_name im = Image.open(picture) im.thumbnail((256, 256)) thumbnail_name = time_file_name(activity_picture.upload_name, sign='nail') + '.jpeg' im.save(save_path+thumbnail_name, 'jpeg') activity_picture.thumbnail = thumbnail_name db.commit()
def save_pub_pictures(pub_id, pictures): """保存酒吧图片""" for picture in pictures: if not allowed_file_extension(picture.filename, PUB_PICTURE_ALLOWED_EXTENSION): continue else: upload_name = picture.filename base_path = PUB_PICTURE_BASE_PATH rel_path = PUB_PICTURE_UPLOAD_FOLDER pic_name = time_file_name(secure_filename(upload_name), sign=pub_id) pub_picture = PubPicture(pub_id, base_path, rel_path, pic_name, upload_name, cover=0) db.add(pub_picture) picture.save(os.path.join(base_path + rel_path + "/", pic_name)) db.commit() save_thumbnail(pub_picture.id)
def save_activity_pictures(activity_id, pictures): """保存酒吧图片""" for picture in pictures: if not allowed_file_extension(picture.filename, ACTIVITY_PICTURE_ALLOWED_EXTENSION): continue else: upload_name = picture.filename base_path = ACTIVITY_PICTURE_BASE_PATH rel_path = ACTIVITY_PICTURE_UPLOAD_FOLDER pic_name = time_file_name(secure_filename(upload_name), sign=activity_id) activity_picture = ActivityPicture(activity_id, base_path, rel_path, pic_name, upload_name, cover=0) db.add(activity_picture) picture.save(os.path.join(base_path+rel_path+'/', pic_name)) db.commit() save_thumbnail(activity_picture.id)
def check_save_pub_type_pictures(pub_type_pictures, model=None, update=None): """图片的长宽比例的保证,其中有两个可能""" for picture in pub_type_pictures: if (update is not None) and (model is not None): old_picture = str(model.base_path) + str(model.rel_path) + "/" + str(model.pic_name) if picture.filename == "": # 或许没有图片 return True if not allowed_file_extension(picture.filename, PUB_TYPE_ALLOWED_EXTENSION): flash(u"图片格式不支持啊,png,jpeg支持", "error") return False upload_name = picture.filename base_path = PUB_TYPE_BASE_PATH rel_path = PUB_TYPE_UPLOAD_FOLDER pic_name = time_file_name(secure_filename(upload_name)) picture.save(os.path.join(base_path + rel_path + "/", pic_name)) image = Image.open(os.path.join(base_path + rel_path + "/", pic_name)) if model is not None: if model.id == 1: if image.size != (440, 199): flash(u"图片需要固定大小的哦 440*199", "error") os.remove(os.path.join(base_path + rel_path + "/", pic_name)) return False else: if image.size != (211, 119): flash(u"图片需要固定大小的哦 211*119", "error") os.remove(os.path.join(base_path + rel_path + "/", pic_name)) return False else: if image.size != (211, 119): flash(u"图片需要固定大小的哦 211*119", "error") os.remove(os.path.join(base_path + rel_path + "/", pic_name)) return False if (update is not None) and (model is not None): try: os.remove(old_picture) except: flash("remove %s failed!", old_picture) model.base_path = base_path model.rel_path = rel_path model.pic_name = pic_name return True
def upload(self, path=None): """ Upload view method :param path: Optional directory path. If not provided, will use the base directory """ # Get path and verify if it is valid base_path, directory, path = self._normalize_path(path) if not self.can_upload: flash(gettext('File uploading is disabled.'), 'error') return redirect(self._get_dir_url('.index', path)) if not self.is_accessible_path(path): flash(gettext(gettext('Permission denied.'))) return redirect(self._get_dir_url('.index')) form = UploadForm(self) if helpers.validate_form_on_submit(form): activity_id = request.args.get('activity_id') if not activity_id: flash(gettext('这里无法上传图片,修改酒吧即可看到图片管理按钮。'), 'error') return redirect("/admin/activitypicturefile") # todo-lyw ugly upload_name = secure_filename(form.upload.data.filename) pic_name = time_file_name(upload_name, sign=activity_id) save_path_name = op.join(directory, pic_name) if not allowed_file_extension(upload_name, ACTIVITY_PICTURE_ALLOWED_EXTENSION): flash(gettext('File "%(name)s" must be a picture!', name=pic_name), 'error') else: try: self.save_file(save_path_name, form.upload.data) picture = ActivityPicture(activity_id, ACTIVITY_PICTURE_BASE_PATH, ACTIVITY_PICTURE_UPLOAD_FOLDER, pic_name, upload_name, cover=0) db.add(picture) db.commit() save_activity_thumbnail(picture.id) # 生产略缩图文件,保存到本地,然后数据库添加数据 self.on_file_upload(directory, path, pic_name) return redirect('/admin/activitypicturefile/?activity_id=' + str(request.args.get('activity_id'))) except Exception as ex: flash(gettext('Failed to save file: %(error)s', error=ex)) return self.render(self.upload_template, form=form)
def post(user_id): parser = reqparse.RequestParser() parser.add_argument('login_type', type=int, required=True, help=u'登陆必须需要login_type') parser.add_argument('password', type=str, required=False) parser.add_argument('open_id', type=str, required=False) parser.add_argument('new_password', type=str, required=False) parser.add_argument('login_name', type=str, required=False) parser.add_argument('nick_name', type=str, required=False) parser.add_argument('system_message_time', type=int, required=False) parser.add_argument('mobile', type=str, required=False) parser.add_argument('tel', type=str, required=False) parser.add_argument('real_name', type=str, required=False) parser.add_argument('sex', type=int, required=False) parser.add_argument('birthday_type', type=int, required=False) parser.add_argument('birthday', type=str, required=False) parser.add_argument('intro', type=str, required=False) parser.add_argument('signature', type=str, required=False) parser.add_argument('ethnicity_id', type=str, required=False) parser.add_argument('company', type=str, required=False) parser.add_argument('job', type=str, required=False) parser.add_argument('email', type=str, required=False) parser.add_argument('province_id', type=str, required=False) parser.add_argument('city_id', type=str, required=False) parser.add_argument('county_id', type=str, required=False) parser.add_argument('street', type=str, required=False) parser.add_argument('head_picture', type=werkzeug.datastructures.FileStorage, location='files') args = parser.parse_args() login_type = args.get('login_type') password = args.get('password', None) open_id = args.get('open_id', None) new_password = args.get('new_password', None) login_name = args.get('login_name', None) nick_name = args.get('nick_name', None) system_message_time = args.get('system_message_time', None) mobile = args.get('mobile', None) tel = args.get('tel', None) real_name = args.get('real_name', None) sex = args.get('sex', None) birthday_type = args.get('birthday_type', None) birthday = args.get('birthday', None) intro = args.get('intro', None) signature = args.get('signature', None) ethnicity_id = args.get('ethnicity_id', None) company = args.get('company', None) job = args.get('job', None) email = args.get('email', None) province_id = args.get('province_id', None) city_id = args.get('city_id', None) county_id = args.get('county_id', None) street = args.get('street', None) head_picture = args.get('head_picture', None) err = {'status': 1} if login_type == 0: if not password: err['message'] = '注册用户获取和改变个人资料需要密码' return err user = User.query.filter(User.id == user_id).first() if not user.check_password(password): err['message'] = '密码错误' return err user_info = UserInfoDb.query.filter(UserInfoDb.user_id == user_id).first() if login_name: if User.query.filter(User.login_name == login_name).count(): err['message'] = 'login_name已存在' return err if nick_name: if User.query.filter(User.nick_name == nick_name).count(): err['message'] = 'nick_name已存在' return err if head_picture: if not allowed_file_extension(head_picture.stream.filename, HEAD_PICTURE_ALLOWED_EXTENSION): err['message'] = '图片的格式不支持,png jpg jpeg gif支持' return err old_head_picture = user_info.base_path + user_info.rel_path + '/' + user_info.pic_name user_info.upload_name = head_picture.stream.filename user_info.base_path = HEAD_PICTURE_BASE_PATH user_info.rel_path = HEAD_PICTURE_UPLOAD_FOLDER user_info.pic_name = time_file_name(secure_filename(head_picture.stream.filename), sign=user_id) head_picture.save(os.path.join(user_info.base_path+user_info.rel_path+'/', user_info.pic_name)) try: os.remove(old_head_picture) except: pass if login_name: user.login_name = login_name if nick_name: user.nick_name = nick_name if new_password: user.change_password(password, new_password) if system_message_time: # 1 if not user.system_message_time: user.system_message_time = todayfstr() else: user.system_message_time = None if mobile: user_info.mobile = mobile if tel: user_info.tel = tel if real_name: user_info.real_name = real_name if sex: user_info.sex = sex if birthday_type: user_info.birthday_type = birthday_type if birthday: user_info.birthday = birthday if intro: user_info.intro = intro if signature: user_info.signature = signature if ethnicity_id: user_info.ethnicity_id = ethnicity_id if company: user_info.company = company if job: user_info.job = job if email: user_info.email = email if province_id: user_info.province_id = province_id if city_id: user_info.city_id = city_id if county_id: user_info.county_id = county_id if street: user_info.street = street db.add(user) db.add(user_info) db.commit() user = User.query.filter(User.id == user_id).first() user_info = UserInfoDb.query.filter(UserInfoDb.user_id == user_id).first() return {'user': pickler.flatten(user), 'user_info': pickler.flatten(user_info), 'status': 0} if login_type == 1 or login_type == 2: if not open_id: err['message'] = '第三方登录用户必须需要open_id' return err user = User.query.filter(User.id == user_id).first() user_info = UserInfoDb.query.filter(UserInfoDb.user_id == user_id).first() if nick_name: if User.query.filter(User.nick_name == nick_name).count(): err['message'] = 'nick_name已存在' return err if head_picture: if not allowed_file_extension(head_picture.stream.filename, HEAD_PICTURE_ALLOWED_EXTENSION): err['message'] = '图片的格式不支持,png jpg jpeg gif支持' return err old_head_picture = user_info.base_path + user_info.rel_path + '/' + user_info.pic_name user_info.upload_name = head_picture.stream.filename user_info.base_path = HEAD_PICTURE_BASE_PATH user_info.rel_path = HEAD_PICTURE_UPLOAD_FOLDER user_info.pic_name = time_file_name(secure_filename(head_picture.stream.filename), sign=user_id) head_picture.save(os.path.join(user_info.base_path+user_info.rel_path+'/', user_info.pic_name)) try: os.remove(old_head_picture) except: pass if nick_name: user.nick_name = nick_name if system_message_time: # 1 if not user.system_message_time: user.system_message_time = todayfstr() else: user.system_message_time = None if mobile: user_info.mobile = mobile if tel: user_info.tel = tel if real_name: user_info.real_name = real_name if sex: user_info.sex = sex if birthday_type: user_info.birthday_type = birthday_type if birthday: user_info.birthday = birthday if intro: user_info.intro = intro if signature: user_info.signature = signature if ethnicity_id: user_info.ethnicity_id = ethnicity_id if company: user_info.company = company if job: user_info.job = job if email: user_info.email = email if province_id: user_info.province_id = province_id if city_id: user_info.city_id = city_id if county_id: user_info.county_id = county_id if street: user_info.street = street db.add(user) db.add(user_info) db.commit() user = User.query.filter(User.id == user_id).first() user_info = UserInfoDb.query.filter(UserInfoDb.user_id == user_id).first() return {'user': pickler.flatten(user), 'user_info': pickler.flatten(user_info), 'status': 0}