def test_path(self): uset = UploadSet('files') uset._config = Config('/uploads') assert uset.path('foo.txt') == '/uploads/foo.txt' assert uset.path('someguy/foo.txt') == '/uploads/someguy/foo.txt' assert (uset.path('foo.txt', folder='someguy') == '/uploads/someguy/foo.txt') assert (uset.path('foo/bar.txt', folder='someguy') == '/uploads/someguy/foo/bar.txt')
def add_data(): if not current_user.is_authenticated: return redirect(url_for('base_blueprint.login')) data_form = UploadDataForm() docs = UploadSet('documents', ['xls', 'xlsx', 'csv']) if data_form.validate_on_submit(): filename = docs.save(data_form.file.data) file_url = docs.url(filename) print(docs.path(filename)) patients = pd.read_excel(docs.path(filename)) print(patients) added = 0 for index, row in patients.iterrows(): patient = Patient() patient.full_name = row["ФИО"] patient.iin = row["ИИН"] patient.dob = datetime.strptime(row["Дата рождения"], '%d.%m.%Y') patient.citizenship = row["Гражданство"] patient.pass_num = row["Номер паспорта"] patient.telephone = row["Номер мобильного телефона"] patient.arrival_date = datetime.strptime(row["Дата въезда"], '%d.%m.%Y') patient.flight_code = row["рейс"] patient.visited_country = row[ "Место и сроки пребывания в последние 14 дней до прибытия в Казахстан (укажите страну, область, штат и т.д.)"] patient.region = row["регион"] patient.home_address = row[ "Место жительство, либо предпологаемое место проживания"] patient.job = row["Место работы"] patient.is_found = True if row["Найден (да/нет)"].lower( ) == "да" else False patient.in_hospital = True if row[ "Госпитализирован (да/нет)"].lower() == "да" else False patient.hospital = row["Место госпитализации"] if not pd.isnull( row["Место госпитализации"]) else "" query = "{}, {}".format(patient.region, patient.home_address) results = geocoder.geocode(query) if len(results): patient.address_lat = results[0]['geometry']['lat'] patient.address_lng = results[0]['geometry']['lng'] db.session.add(patient) db.session.commit() added += 1 # # else we can create the user return route_template('add_data', form=data_form, added=added) # return render_template( 'login/register.html', success='User created please <a href="/login">login</a>', form=patient_form) else: return route_template('add_data', form=data_form, added=-1)
def moment(): form = MomentForm() file_url_list = [] if form.validate_on_submit(): dir_path = basedir + '/app/static/moment_pic/' upload_path = create_path(dir_path) photos = UploadSet('photos', IMAGES) for img in request.files.getlist('photo'): name = hashlib.md5( (current_user.username + str(time.time())).encode('utf8')).hexdigest()[:15] img_name = photos.save(img, folder=upload_path, name=name + '.') # print(upload_path,img_name) base_width = 300 img = Image.open(photos.path(img_name)) w_percent = (base_width / float(img.size[0])) h_size = int((float(img.size[1]) * float(w_percent))) img_s = img.resize((base_width, h_size), PIL.Image.ANTIALIAS) fn, ext = img_name.split('.') # fn,ext = os.path.splitext(img_name) img_s_name = name + '_s.' + ext # print('./app/static/moment_pic/' + upload_path+img_s_name) img_s.save('app/static/moment_pic/' + upload_path + img_s_name, ext) # './app/static/moment_pic/' + str(upload_path) # img_s = photos.save(img_s, folder=upload_path, name=name + '_s' + '.') # img_s_url = photos.url(img_name) img_s_url = photos.url(upload_path + img_s_name) file_url_list.append(img_s_url) # print(file_url) Moment(username=current_user.username, picture=file_url_list, content=form.content.data, user_id=current_user.id).save() flash('发布成功!', 'success') return redirect(url_for('.index')) else: pass return render_template('post_moment.html', form=form, file_url_list=file_url_list)
def upload(): """upload a photo to group.""" global local_filename global task_id head_group_id = current_app.config['HEAD_GROUP_ID'] if request.method == 'POST': user_id = request.form['user_id'] followed_group_id = request.form['group_id'] if not followed_group_id: return jsonify({'code': 400, 'msg': 'group_id is required.'}) elif not user_id: return jsonify({'code': 400, 'msg': 'user_id is required.'}) if 'photo' not in request.files: return jsonify({'code': 400, 'msg': 'photo is required.'}) head_pic = request.files['photo'] try: # 1、校验组是否存在 group = get_group(head_group_id) if not group: return jsonify({'code': 400, 'msg': 'can not found group by id [{0}]'.format(head_group_id)}) photos = UploadSet('photos', IMAGES) configure_uploads(current_app, photos) filename = photos.save(head_pic) local_filename = photos.path(filename) oss_dir = group[1] oss_filename = '{0}{1}'.format(group[1], filename) if not oss_dir.endswith("/"): oss_filename = '{0}/{1}'.format(group[1], filename) # 2、获得图片的base64编码 photo_base64 = base64.b64encode(open(local_filename, 'rb').read()) encode_str = str(photo_base64, 'utf-8') # 3、通过第三方接口获得图片的特征值 ret = r.post(current_app.config['GET_FEATURE_URL'], data=json.dumps({'image': encode_str}), headers={'content-type': 'application/json'}) response = json.loads(ret.text) if 'body' in response: body = response['body'] # 4、上传图片到oss oss_url = upload_file(oss_filename, local_filename) # 5、保存photo数据到db head_pic = get_image_by_muiti_condition(filename, oss_filename, int(head_group_id)) global head_pic_id if not head_pic: head_pic_id = add_image(filename, oss_filename, int(head_group_id), json.dumps(body)) else: head_pic_id = head_pic[0] update_image(filename, oss_filename, int(head_group_id), json.dumps(body), head_pic_id) # 6、保存用户、头像图片和关注组的关系 face = get_face_by_user_id_and_grou_id(user_id, followed_group_id) if not face: add_face(user_id, followed_group_id, head_pic_id) else: update_face(user_id, followed_group_id, head_pic_id, face[0]) # 7、添加一个相似图片查找任务,使用用户头像去所关注的组中找相似的图片,结果缓存到结果表 task_id += 1 Thread(target=find_similar_task, args=(current_app._get_current_object(), "face_%s" % task_id, followed_group_id, head_pic_id,) ).start() # 8、返回头像保存结果 return jsonify( {'code': 200, 'image_id': head_pic_id, 'url': oss_url, 'url_express': current_app.config['OSS_URL_EXPIRES'], 'msg': 'modify head image success.'}) else: return jsonify(response) except Exception as e: traceback.print_exc() return jsonify({'code': 500, 'error': '{0}'.format(e)}) finally: # 6、删除临时图片 try: if os.path.isfile(local_filename): os.remove(local_filename) except FileNotFoundError: print("delete not exits file") except Exception: traceback.print_exc() else: return jsonify({'code': 400, 'msg': 'upload image failed.'})
@app.route('/', methods=['GET', 'POST']) def upload(): if request.method == 'POST': file = request.files.get('file') filename = fileset.save(file) fileurl = fileset.url(filename) filepath = fileset.path(filename) return fileurl return render_template('upload.html') if __name__ == "__main__": app.run(debug=True, host='0.0.0.0') ''' DEFAULTS = TEXT + DOCUMENTS + IMAGES + DATA def patch_request_class(app, size=64 * 1024 * 1024): def configure_uploads(app, upload_sets): class UploadConfiguration(object): def __init__(self, destination, base_url=None, allow=(), deny=()): class UploadSet(object): def __init__(self, name='files', extensions=DEFAULTS, default_dest=None): name:名字,必须和配置的名字相对应; extensions:设置允许的文件扩展名; default_dest :设置默认的上传文件路径; basename = self.get_basename(storage.filename) UploadSet.url(filename):返回filename下载的url路径; UploadSet.path(filename):返回filename的绝对路径,不会检查该文件是否存在; UploadSet.config:返回配置;
def Delete(set: UploadSet, filename: str): try: os.remove(set.path(filename)) except OSError as err: warnings.warn("Failed to remove file: \"" + filename + "\". \n" + err.message)
def images(): """upload a photo to group.""" global local_filename global task_id if request.method == 'POST': group_id = request.form['group_id'] if not group_id: return jsonify({'code': 400, 'msg': 'group_id is required.'}) if 'photo' not in request.files: return jsonify({'code': 400, 'msg': 'photo is required.'}) photo = request.files['photo'] try: # 1、校验组是否存在 group = get_group(group_id) if not group: return jsonify({ 'code': 400, 'msg': 'can not found group by id [{0}]'.format(group_id) }) photos = UploadSet('photos', IMAGES) configure_uploads(current_app, photos) filename = photos.save(photo) local_filename = photos.path(filename) oss_dir = group[1] oss_filename = '{0}{1}'.format(group[1], filename) if not oss_dir.endswith("/"): oss_filename = '{0}/{1}'.format(group[1], filename) # 2、获得图片的base64编码 photo_base64 = base64.b64encode(open(local_filename, 'rb').read()) encode_str = str(photo_base64, 'utf-8') # 3、通过第三方接口获得图片的特征值 ret = r.post(current_app.config['GET_FEATURE_URL'], data=json.dumps({'image': encode_str}), headers={'content-type': 'application/json'}) response = json.loads(ret.text) if 'body' in response: body = response['body'] # 4、上传图片到oss oss_url = upload_file(oss_filename, local_filename) # 5、保存photo数据到db image_id = add_image(filename, oss_filename, int(group_id), json.dumps(body)) task_id += 1 Thread(target=find_similar_task, args=( current_app._get_current_object(), "image_%s" % task_id, group_id, image_id, )).start() return jsonify({ 'code': 200, 'image_id': image_id, 'url': oss_url, 'url_express': current_app.config['OSS_URL_EXPIRES'], 'msg': 'upload image success.' }) else: return jsonify(response) except Exception as e: traceback.print_exc() return jsonify({'code': 500, 'error': '{0}'.format(e)}) finally: # 6、删除临时图片 try: if os.path.isfile(local_filename): os.remove(local_filename) except FileNotFoundError: print("delete not exits file") except Exception: traceback.print_exc() else: return jsonify({'code': 400, 'msg': 'upload image failed.'})
def search_by_photo(): """upload a photo to group.""" global local_filename if request.method == 'POST': group_id = request.form['group_id'] if not group_id: return jsonify({'code': 400, 'msg': 'group_id is required.'}) if 'photo' not in request.files: return jsonify({'code': 400, 'msg': 'photo is required.'}) photo = request.files['photo'] try: # 1、校验组是否存在 group = get_group(group_id) if not group: return jsonify({ 'code': 400, 'msg': 'can not found group by id [{0}]'.format(group_id) }) # 2、获得指定group_id下的所有photo target_images = get_images_by_group_id(group_id) if not target_images: return jsonify({ 'code': 400, 'msg': 'cant not find any image by group id {0}'.format(group_id) }) limit = float(current_app.config['FEATURES_MAX_MATCH_LIMIT']) limit = 2 * (1 - limit) print("limit {0}".format(limit)) # 3、上传图片 photos = UploadSet('photos', IMAGES) configure_uploads(current_app, photos) filename = photos.save(photo) local_filename = photos.path(filename) # 4、获得图片的base64编码 photo_base64 = base64.b64encode(open(local_filename, 'rb').read()) encode_str = str(photo_base64, 'utf-8') # 5、通过第三方接口获得图片的特征值 ret = r.post(current_app.config['GET_FEATURE_URL'], data=json.dumps({'image': encode_str}), headers={'content-type': 'application/json'}) response = json.loads(ret.text) print(filename) if 'body' in response: body = response['body'] image = (None, filename, None, int(group_id), json.dumps(body)) # 6、比对feature值 sorted_matched_images = find_similar(image, target_images) result_body = [] for matched in sorted_matched_images: oss_path = matched[2] expires = current_app.config['OSS_URL_EXPIRES'] oss_url = get_oss_url(oss_path, expires) result_body.append({ 'id': matched[0], 'name': matched[1], 'url': oss_url, 'expires': expires }) return jsonify({'code': 200, 'data': result_body}) else: return jsonify(response) except Exception as e: traceback.print_exc() return jsonify({'code': 500, 'error': '{0}'.format(e)}) finally: # 6、删除临时图片 try: if os.path.isfile(local_filename): os.remove(local_filename) except FileNotFoundError: print("delete not exits file") except Exception: traceback.print_exc() else: return jsonify({'code': 400, 'msg': 'upload image failed.'})