Exemplo n.º 1
0
 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')
Exemplo n.º 2
0
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)
Exemplo n.º 3
0
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)
Exemplo n.º 4
0
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.'})
Exemplo n.º 5
0
@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:返回配置;
Exemplo n.º 6
0
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)
Exemplo n.º 7
0
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.'})
Exemplo n.º 8
0
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.'})