fastapi+vue实现导入Excel表格的功能

1.前端部分

1.1 api设置

// 导入用户
export function uploadUser(data) {
  const formData = new FormData();
  formData.append('file', data);  // data 是从文件上传事件中获取的文件对象
  return request({
    url: '/users/upload',
    method: 'post',
    headers: {
      'Content-Type': 'multipart/form-data'
    },
    data: formData,
    transformRequest: [(data) => data]  // 禁用默认的序列化行为
  })
}

1.2 导入按钮

      <el-upload
        class="upload-demo"
        ref="upload"
        action="dummy-action"
        :show-file-list="false" :before-upload="handleImportUser">
        <el-button type="primary" icon="el-icon-download" style="margin-left: 20px">导入</el-button>
      </el-upload>

1.3 按钮点击事件调用接口

    // 导入的回调
    async handleImportUser(file) {
      if (!file.name.endsWith('.xlsx')) return this.$message.error('请上传Excel文件!')
      if (file.size > 1024 * 1024 * 5) return this.$message.error('文件大小不能超过5MB!')
      const res = await uploadUser(file)
      if (res.code !== 200) return this.$message.error('导入失败!')
      this.$message.success('导入成功!')
      this.getUserList()
    }

2. 后端部分

@user_router.post('/upload', summary='导入用户')
async def user_upload(file: UploadFile):
    # 检查文件类型是否为 Excel
    if not file.filename.endswith(('.xls', '.xlsx')):
        return base_response(code=400, msg='文件格式错误!')
    if file.size > 1024 * 1024 * 5:
        return base_response(code=400, msg='文件大小不能超过5MB!')

    # 读取 Excel 文件
    wb = openpyxl.load_workbook(file.file)
    ws = wb.active

    # 遍历 Excel 表格的每一行数据并保存到数据库中
    for row in ws.iter_rows(min_row=2, values_only=True):  # Assuming first row is header
        try:
            name, nick_name, phone, password = row
            # 数据校验
            if not name or not password:
                raise ValueError('姓名和密码不能为空!')
            if await User.exists(name=name):
                raise ValueError('用户已存在!')
            if not re.match(r'^1[3-9]\d{9}$', str(phone)):
                raise ValueError('手机号码格式错误!')

            # 将有效数据保存到数据库中,这里假设有一个数据库操作函数 save_user()
            await User.create(name=name, nick_name=nick_name, phone=phone, password=hash_password(str(password)))
        except ValueError as e:
            print(f"数据导入失败:{e}")

    return base_response(code=200, msg='导入用户成功!')

相关推荐

  1. fastapi+vue实现导入Excel表格功能

    2024-05-16 10:22:18       40 阅读
  2. Flask+vue+axios完成导出Excel表格功能

    2024-05-16 10:22:18       62 阅读
  3. 通过easyExcel实现表格导入导出

    2024-05-16 10:22:18       70 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-16 10:22:18       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-16 10:22:18       100 阅读
  3. 在Django里面运行非项目文件

    2024-05-16 10:22:18       82 阅读
  4. Python语言-面向对象

    2024-05-16 10:22:18       91 阅读

热门阅读

  1. 编译gdb:在x86虚拟机上,加载分析arm程序及崩溃

    2024-05-16 10:22:18       37 阅读
  2. 贪吃蛇(C++)

    2024-05-16 10:22:18       37 阅读
  3. C#数据库密码加密保存和登录验证方法

    2024-05-16 10:22:18       29 阅读
  4. .net中的依赖注入框架Autofac

    2024-05-16 10:22:18       30 阅读
  5. python实名认证开发文档-接口文档-身份证ocr接口

    2024-05-16 10:22:18       37 阅读