vue手动拖入和导入excel模版
最佳答案 问答题库718位专家为你答疑解惑
1.列表按钮
<el-button @click=“importExcel(scope.row.id)” size=“small” type=“text”>导入excel模版
2.按钮弹框
3.data定义数据
data () {
return {
projectId: ‘’,
importDialogVisible: false,
fileList: [], //手动上传
upload_file: ‘’, //导入excel模版名称
verifyFile: ‘’, //校验文件
file: {}, //excel文件对象
}
}
4.获取上传校验文件数据(这个数据要和上传excel模版使用md5加密做对比,如果和上传md5数据一致说明用户没有修改excel数据)
//获取校验文件md5
verifyFileExcel(e){
// 错误情况判断
const files = e.target.files
if (files.length <= 0) {
return false
} else if (!/.(txt)KaTeX parse error: Expected '}', got 'EOF' at end of input: … this.message({
message: “上传格式不正确,请上传txt格式”,
type: “warning”
})
return false
}
const file = event.target.files[0]
const reader = new FileReader()
reader.onload = (event) => {
this.getVerifyFile(event.target.result)
}
reader.readAsText(file)
},
//不能在读取方法中使用data定义的属性赋值,要使用外部方法传值
getVerifyFile(data){
this.verifyFile = data
},
4.导入前清理数据
importExcel (id) {
this.importDialogVisible = true
this.projectId = id
//清空上传表单
this.upload_file = ‘’
this.fileList = []
if(this.KaTeX parse error: Expected '}', got 'EOF' at end of input: … this.refs.fileInput1.value = null
}
if(this.KaTeX parse error: Expected '}', got 'EOF' at end of input: … this.refs.fileInput2.value = null
}
//初始化校验文件位空值
this.verifyFile = null
},
5.手动上传Excel模版
Excel(e) {
let that = this
// 错误情况判断
const files = e.target.files
if (files.length <= 0) {
return false
} else if (!/.(xls|xlsx)KaTeX parse error: Expected '}', got 'EOF' at end of input: … this.message({
message: “上传格式不正确,请上传xls或者xlsx格式”,
type: “warning”
})
return false
} else {
that.upload_file = files[0].name
}
//将上传excel文件转字节流
const reader = new FileReader()
const file = event.target.files[0]
//将Excel模版生成流对象
const formData = new FormData()
formData.append(‘file’,file)
this.file = formData
const XLSX = require(‘xlsx’)
reader.onload = event => {
const data = new Uint8Array(event.target.result)
const workbook = XLSX.read(data, { type: ‘array’ })
const sheetName = workbook.SheetNames[0]
const worksheet = workbook.Sheets[sheetName]
const json = XLSX.utils.sheet_to_json(worksheet, { header: 1 })
//将获取的数据传入整理数据方法中,这个方法可以传入后端接口
this.getFileList(json)
}
reader.readAsArrayBuffer(file)
}
6.拖拽上传文件
handleDrop(e) {
// 阻止浏览器的默认行为
e.preventDefault()
const file = e.dataTransfer.files[0]
if(file.size <= 0){
return false
}else if (!/.(xls|xlsx)KaTeX parse error: Expected '}', got 'EOF' at end of input: … this.message({
message: “上传格式不正确,请上传xls或者xlsx格式”,
type: “warning”
})
} else {
this.upload_file = file.name
}
const reader = new FileReader()
this.fileList = []
const XLSX = require(‘xlsx’)
reader.onload = event => {
const data = new Uint8Array(event.target.result)
console.log(data)
const workbook = XLSX.read(data, { type: ‘array’ })
const sheetName = workbook.SheetNames[0]
const worksheet = workbook.Sheets[sheetName]
const json = XLSX.utils.sheet_to_json(worksheet, { header: 1 })
this.getFileList(json)
}
reader.readAsArrayBuffer(file)
}
7.提交Excel模版数据(主要是校验文件作对比,查询接口是否已经上传同样的Excel模版数据,整理Excel模版数据,传给后端接口)
async submitForm() {//1.判断校验文件是否上传if(this.verifyFile === '' || this.verifyFile === null){this.$message({message: "请上传校验文件!",type: "warning"})return}//2.返回生成校验文件var fileData = await api.getFileType(this.file)//查询是否上传excel报表(保存使用上传校验文件数据做唯一字段)var type = await api.getVerifyFile(this.verifyFile)if(type.length > 0){this.$message({message: this.upload_file + "已上传,请勿重复上传!",type: "warning"})return}//对比校验文件(对比成功提交Excel数据)if(this.verifyFile === fileData){//获取excel模版数据const files = []const dataList = []if(this.fileList.length > 0){for (let i = 0; i < this.fileList.length; i++) {if(i > 1){files.push(this.fileList[i])}}//将数据转换成对象files.forEach(item => {var param = {projectId: this.projectId,scannedName: null,problemNumber: null,scanPageNumber: null,errorRate: null,problemStatisticsName: this.upload_file.replace(".xlsx","").replace(".xls",""),verifyFile: this.verifyFile,problemStatisticsFileUrl: this.problemStatisticsFileUrl}//将excel模版数据保存到对象中//定义excel对象for (const key in item) {if(key === '0'){param.scannedName = item[key]} else if(key === '1'){param.problemNumber = item[key]} else if(key === '2'){param.scanPageNumber = item[key]} else if(key === '3'){param.errorRate = item[key]}}dataList.push(param)})}//向后端接口Excel模版数据api.importPersonnelProblem(dataList).then((data) => {this.$message({type: 'success',message: '数据导入成功!'})this.getDataList()this.importDialogVisible = false}).catch((err) => {util.$message.showInfo2(err)})} else {this.$message({type: 'warning',message: 'excel数据改动,校验文件失败!'})//刷新列表方法this.getDataList()this.importDialogVisible = false}}
dataList数据返给接口:
8.上传excel返回加密的校验文件和校验文件数据对比
接口使用MultipartFile对象接收
/**
* 生成md5校验文件
* @return
*/
@Override
public String getMd5File(MultipartFile file) {
InputStream is = null;
try {
is = file.getInputStream();
} catch (IOException e) {
e.printStackTrace();
}
int iAvail = 0;
try {
iAvail = is.available();
} catch (IOException e) {
e.printStackTrace();
}
//2.转为字节流
byte[] bytes = new byte[iAvail];
try {
is.read(bytes);
} catch (IOException e) {
e.printStackTrace();
}
//3.将文件名转成utf-8字节数组
String str = file.getOriginalFilename().replace(“.xlsx”,“”).replace(“.xls”,“”);
byte[] byteArray = str.getBytes(StandardCharsets.UTF_8);
//4.合并文件名utf-8和excel文件字节数组
byte[] type = addBytes(byteArray ,bytes);
//5.md5加密生成校验文件
String md5 = DigestUtils.md5Hex(type).toUpperCase();
System.out.println(“md5大写:” + md5);
return md5;
}
99%的人还看了
相似问题
- Docker篇之利用docker搭建ftp服务器可实现多用户上传
- 【Vue3】解决Vue打包后上传服务器 资源路径加载错误
- 推荐一个windows上传linux服务器/linux服务器的docker镜像的工具,摆脱docker cp,以及解决常见问题。
- git 将本地已有的一个项目上传到新建的git仓库的方法
- 微信小程序发货信息录入接口 错误上传时间非法,请按照 RFC 3339 格式填写?
- 如何防止研发把代码上传到私人gitee/github?
- 中间件安全:Apache Tomcat 文件上传.(CVE-2017-12615)
- git下载安装配置及Git在Gitee上拉取和上传代码教程
- 文件上传漏洞(CVE-2022-23043)
- react 手机端 rc-table列隐藏(根据相关条件是否隐藏)、实现图片上传操作
猜你感兴趣
版权申明
本文"vue手动拖入和导入excel模版":http://eshow365.cn/6-26467-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!
- 上一篇: C多维数组指针(学习笔记)
- 下一篇: LVS集群-DR模式