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

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

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

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)
}
}

最新文章

  1. Python学习
  2. java程序员快速掌握python系列——概述
  3. 环境变量/path/classpath/JAVA_HOME/JAVA环境变量配置
  4. Android中top命令字段含义
  5. 如何升级Ceph版本及注意事项
  6. spring 后置处理器BeanFactoryPostProcessor和BeanPostProcessor的用法和区别
  7. CSS3_loading效果
  8. super()和this()的区别
  9. NTFS 权限讲解 ACL
  10. Linux下监控磁盘使用量并在超过阀值后自动发送报警邮件
  11. xcode的ios工程目录结构
  12. .NET开发工具
  13. 28个Unix/Linux的命令行神器
  14. 操蛋的UITableView重用机制
  15. vmware 安装提示the msi failed
  16. layer弹出层框架alert与msg详解
  17. cocos2d-x 控制台输出日志
  18. 分享一个.NET平台开源免费跨平台的大数据分析框架.NET for Apache Spark
  19. JS 设计模式四 -- 模块模式
  20. python发展史

热门文章

  1. 4.websocket基本概念
  2. 三、Go环境安装
  3. 【Java复健指南09】项目练习全解--房屋出租系统
  4. AR空间音频能力,打造沉浸式声音体验
  5. 【云原生 · Kubernetes】部署高可用kube-scheduler集群
  6. i春秋破译
  7. 解决mysql本地连接速度慢
  8. 基于jenkins+kubernetes的cicd流程实践一:环境搭建及方案原理实现
  9. 【SQL基础】【关键字大写】条件查询:比较、不等于、IN、为空、BETWEEN
  10. 【Flume】概述及组成、入门案例、进阶(事务、拓扑结构)、不同拓扑案例、自定义、数据流监控Ganglia