Beispiel #1
0
def upload_file():
    """Upload a file to the database"""

    if not current_user.is_authenticated:
        flash("You need to log in or sign up before uploading file.")
        return redirect(url_for("login"))

    form = UploadFileForm()
    if form.validate_on_submit():
        pic = form.file.data
        filename = generate_filename(File, pic.filename)
        mimetype = pic.mimetype
        file = File(filename=filename, file=pic.read(), mimetype=mimetype, file_owner=current_user)
        db.session.add(file)
        db.session.commit()
        return redirect(url_for("get_files"))
    return render_template("upload-img.html", form=form, logged_in=True, file=True)
Beispiel #2
0
def upload():
    uff = UploadFileForm()
    filenames = []
    if uff.validate_on_submit():
        #filepath = 'C:\\Users\\lenovo\\Desktop\\学习任务\\URP项目\\农机作业路径地图可视化与修正工具Web开发\\农机作业路径地图可视化与修正工具Web开发\\' + uff.lands_file.data.filename
        # print(filepath)
        #获取文件名并保存csv文件到服务器临时文件夹C:\\Users\\lenovo\\Desktop\\学习任务\\URP项目\\csv_tmp\\csv_tmp

        filenames.append(uff.lands_file.data.filename)
        filenames.append(uff.routes_file.data.filename)
        filenames.append(uff.barriers_file.data.filename)
        filenames.append(uff.parameters_file.data.filename)
        print(filenames)
        print(type(filenames))
        #获取当前存储的json文件数量
        filenum = len(os.listdir(json_root + json_name[0]))
        print(filenum)
        flash(u'上传成功')

    for file_type in range(len(filenames)):
        csv_path = files_tmp + filenames[file_type]
        print(csv_path)
        if file_type == 0:
            uff.lands_file.data.save(csv_path)
        elif file_type == 1:
            uff.routes_file.data.save(csv_path)
        elif file_type == 2:
            uff.barriers_file.data.save(csv_path)
        elif file_type == 3:
            uff.parameters_file.data.save(csv_path)

        # 调用csv2json,生成标准数据到json文件
        #json_path = json_root + json_name[file_type] + json_partname[file_type] + str(filenum) + '.json'
        json_path = json_root + json_name[file_type] + gen_name(
            file_type, filenum)
        print(json_path)
        flash(u'正在导入文件数据...')
        csv2json(json_path, csv_path, file_type)

        #保存数据到数据库
        with open(csv_path, 'r') as cf:
            # 创建csv读取器
            reader = csv.DictReader(cf, fieldname[file_type])
            # 读掉原来表头
            try:
                next(reader)
            except StopIteration:
                sys.exit()

            for row in reader:
                # 只有农机参数中不涉及经纬度方向问题
                if file_type != 3:
                    if row['latitude'][-1] == 'N':
                        row['latitude'] = row['latitude'][0:-1]
                    elif row['latitude'][-1] == 'S':
                        row['latitude'] = '-' + row['latitude'][0:-1]

                    if row['longtitude'][-1] == 'E':
                        row['longtitude'] = row['longtitude'][0:-1]
                    elif row['longtitude'][-1] == 'W':
                        row['longtitude'] = '-' + row['longtitude'][0:-1]

                # 保存到数据库
                if file_type == 0:
                    data = md.Land(latitude=row['latitude'],
                                   longtitude=row['longtitude'],
                                   altitude=row['altitude'])
                elif file_type == 1:
                    data = md.Route(latitude=row['latitude'],
                                    longtitude=row['longtitude'],
                                    engine_speed=row['engine_speed'],
                                    operate_mode=row['operate_mode'])
                elif file_type == 2:
                    data = md.Barrier(name=row['name'],
                                      latitude=row['latitude'],
                                      longtitude=row['longtitude'],
                                      altitude=row['altitude'])
                elif file_type == 3:
                    data = md.Parameter(operating_width=row['operating_width'],
                                        turning_radius=row['turning_radius'],
                                        total_length=row['total_length'],
                                        total_width=row['total_width'])
                db.session.add(data)
                db.session.commit()

    #节约服务器空间,删除已经生成过json文件的相应csv文件
    for file in os.listdir(files_tmp):
        os.remove(files_tmp + file)

    return render_template('upload.html', form=uff)