实现web前端上传excel文件到flask服务器

这里有两种方法:1. html方式;2. javascript方式(jQuery+ajax)

第1种方法:html方式

这种方法直接通过设计form表单相关属性实现将excel表格上传到服务器,并在服务器端通过xlrd等excel文件处理模块读取数据。

  1. 前端页面示例代码(注意:form元素中的enctype="multipart/form-data"不可或缺)
<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>Title</title>
</head>
<body>
<form action="/toexcel" method="post" enctype="multipart/form-data">

      <li><input type="file" name="file" accept=".xls" value="请上传Excel文件"/></li>
      <li><input type="submit" value="导入" class="btn_search"></li>

</form>
</body>
</html>
  1. 后台示例代码展示
@app.route('/toexcel',methods = ['GET','POST'])
def toExcel():
    if request.method == 'POST':
        file = request.files.get('file')
        f = file.read()
        data_file = xlrd.open_workbook(file_contents=f)
        # sheet1
        table = data_file.sheet_by_index(0)
        # print(table)
        # print(table.nrows) # 获取该sheet中的有效行数
        for row_num in range(0, table.nrows):
            print(table.row_values(row_num))
        return redirect('/index') # 根据具体问题返回不同内容
    return redirect('/index') # 根据具体问题返回不同内容

第2中方法: javascript方式(jQuery+ajax)

这种方法利用FormData获得数据,通过ajax将数据上传到flask服务器端,再通过xlrd等excel文件处理模块读取数据。

  1. 前端页面关键代码(注意:form元素中的enctype="multipart/form-data"不可或缺)
<form enctype="multipart/form-data">
     <input type="file" name="file" id="file_name" accept=".xls"/>
</form>

<script>
    function upload_file(fileObj) {
        let form = new FormData(); // FormData 对象
        form.append("file", fileObj); // 文件对象
        console.log(form.get('file'));
        $.ajax({
            url: '/toexcel', //url地址
            type: 'POST',   //上传方式
            data: form,     // 上传formdata封装的数据
            dataType: 'JSON',
            cache: false,   // 不缓存
            processData: false, // jQuery不要去处理发送的数据
            contentType: false,  // jQuery不要去设置Content-Type请求头
            success:function (data) {   //成功回调
                console.log(data);  // 根据具体问题替换代码
            },
            error:function (data) {   //失败回调
                console.log(data);  // 根据具体问题替换代码
            }
        });
    }

    $('#file_name').change(function (e) {
        let fileName = e.target.files[0];//js 获取文件对象
        // console.log(fileName);
        if(fileName !== undefined){
            let file_typename = fileName.name.substring(fileName.name.lastIndexOf('.'));
            if (file_typename === '.xls') {
                upload_file(fileName);
            }else{
                console.log("请选择正确的文件类型!")
            }
            }else{
                console.log("请选择正确的文件!")
            }
     });

</script>
  1. 后台示例代码展示
@app.route('/toexcel', methods=['GET', 'POST'])
def toExcel():
   if request.method == 'POST':
       data = request.files.get('file')
       f = data.read()
       data_file = xlrd.open_workbook(file_contents=f)
       # sheet1
       table = data_file.sheet_by_index(0)
       # 输出每一行的内容
       # table.nrows获取该sheet中的有效行数
       for row_num in range(0, table.nrows):
           print(table.row_values(row_num))
       return ... # 根据具体问题返回数据
   return ... # 根据具体问题返回数据
  • 0
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值