VUE上传表格文件发送后端,后端解析以及上传文件,前端进行解析的实现方法

首先来说前端上传表格,然后利用纯前端技术进行解析表格的办法

详细步骤----请点击这里

接下来来说上传发送给后端的代码实现

html


<input ref="myInput" type="file" class="my_input" :multiple="myMultiple" style="display:none;" @change="importExcel">
<el-button type="primary" style="width:150px;" :disabled="item.updisabled" size="small" @click="myOpen()">上傳</el-button>

script

import myComValid from '../co-assets/com-valid.js'
import myCom from '../co-assets/com-fun' // 这里只有个弹框函数,就不放了
import Request from '../co-assets/request.js' // 这个是请求函数,和其他的AXIOS一样,只不过稍微封装了一下下,可以改为原来的axios请求方式

// 数据
myMultiple: true

fun


    // 方法
    myOpen() {
      setTimeout(() => {
        this.$refs.myInput.click()
      }, 500)
    }
    /**
     * 導入
     */
    async importExcel(e) {
      // console.log('上传了')
      this.formData[this.currentFlag]['fileName'] = '正在上传,请稍后...'
      this.loading = true
      this.loadingTest = '正在上传文件,请稍后...'
      const files = e.target.files
      if (files.length <= 0) {
        return false
      } else if (files.length > 2) {
        myCom.alert('上传数量有误(正确数量为1-2个),请重新选择文件!')
        this.loading = false
        return false
      } else {
        Object.values(files).every(_ => {
          // 循环检查所有文件是否都是xlsx
          if (!/\.(xlsx)$/.test(_.name.toLowerCase()) || myComValid.validNoTest(_.name)) {
            myCom.alert('請重新上傳,文件必须为xlsx格式且文件名不可包含汉字!')
            this.loading = false
            return false
          }
        })
      }
      const url = myUrl +'/uploadfile' 
      const myformdataFile = new FormData()
      if (e.target.files.length > 1) {
        myformdataFile.append('file', e.target.files[0])
        myformdataFile.append('file', e.target.files[1])
      } else {
        myformdataFile.append('file', e.target.files[0])
      }
      if (this.currentFlag === 'header') {
        myformdataFile.append('files', this.filename)
      }
      myformdataFile.append('actiontime', this.topForm.version.value)
      try {
        const res = await Request.httpRes(
          'post',
          url,
          myformdataFile,
          false,
          'Success!',
          '上傳文件失敗,請重新上傳!'
        )
        if (res && res.status === 'Success') {
          res.msg && this.$message.success(res.msg)
        } else {
          res.msg && this.$message.error(res.msg)
          this.setErrorUpload(res)
        }
      } catch (err) {
        this.$message.error('執行操作失敗,請重試!')
        this.setErrorUpload()
      }
      var input = this.$refs.myInput
      input.value = ''
    },
    // 導入


下面是正则验证函数

com-valid.js

export default {
  /**
   * 验证IP
   * @param {String} ip
   */
  validIp(ip) {
    const reg = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/
    return reg.test(ip)
  },
  /**
   * 检测是否包含文字
   * @param {String} str
   */
  validNoTest(str) {
    const reg = /[\u4e00-\u9fa5]+/g
    return reg.test(str)
  },
  /**
   * 检测是否包含文字或者空格
   * @param {String} str
   */
  validNoTest1(str) {
    const reg = /[\u4e00-\u9fa5\s]+/g
    return reg.test(str)
  }
}


  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用Vue.js后端API来实现上传CSV文件并将其展示在表格中的功能。下面是一种简单的实现方式: 1. 前端部分: - 创建一个包含文件上传表格展示的Vue组件。 - 在模板中添加一个文件上传的输入框和一个用于展示表格的HTML表格。 - 给文件上传的输入框添加一个事件监听器,当选择文件后触发。 - 在事件处理函数中,使用FormData对象创建一个表单数据对象,并将选择的文件添加到其中。 - 发送POST请求到后端API,将表单数据作为请求体发送。 - 在接收到后端响应后,将响应数据解析为JSON格式,并将其赋值给Vue组件的数据属性,以便在表格中展示。 2. 后端部分: - 创建一个接收POST请求的API端点,用于接收前端上传的CSV文件。 - 在API端点中,使用适当的库(如`csv-parser`)解析CSV文件,并将其转换为JSON格式。 - 将解析后的JSON数据作为响应返回给前端。 下面是一个简单的示例代码: 前端部分(Vue组件): ```vue <template> <div> <input type="file" @change="uploadFile" /> <table> <thead> <tr> <th v-for="header in headers" :key="header">{{ header }}</th> </tr> </thead> <tbody> <tr v-for="data in tableData" :key="data.id"> <td v-for="header in headers" :key="header">{{ data[header] }}</td> </tr> </tbody> </table> </div> </template> <script> export default { data() { return { headers: [], tableData: [] }; }, methods: { async uploadFile(event) { const file = event.target.files[0]; const formData = new FormData(); formData.append('file', file); try { const response = await fetch('/api/upload', { method: 'POST', body: formData }); const jsonData = await response.json(); this.headers = Object.keys(jsonData[0]); this.tableData = jsonData; } catch (error) { console.error(error); } } } }; </script> ``` 后端部分(Node.js示例,使用Express框架): ```javascript const express = require('express'); const csv = require('csv-parser'); const fs = require('fs'); const app = express(); app.use(express.json()); app.post('/api/upload', (req, res) => { const results = []; req.pipe(req.busboy); req.busboy.on('file', (fieldname, file, filename) => { file.pipe(csv()) .on('data', (data) => results.push(data)) .on('end', () => { res.json(results); }); }); }); app.listen(3000, () => { console.log('Server started on port 3000'); }); ``` 请注意,上述示例代码仅供参考,并未完全考虑错误处理和安全性。在实际开发中,你需要根据具体需求进行适当的修改和优化。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值