vue.js实现excel和图片的导入

编程入门 行业动态 更新时间:2024-10-23 07:20:57

vue.js实现excel和<a href=https://www.elefans.com/category/jswz/34/1770705.html style=图片的导入"/>

vue.js实现excel和图片的导入

由于项目需要同时导入excel文档和jpg图片,因此尝试了一些方法来完成任务。

图片数据是以base64格式存入的,显示和转移都比较方便。

一开始考虑的是将图片插入excel中,这样的好处是一一对应,不会出错,但是搜索了关于图片的插入,还是比较复杂的,对用户来说不太现实。

最后我将excel和图片分开导入,使用图片名来对应字段,效果还可以,下面附上代码。
下面是数据的导入:

	<el-form-item label="选择excel文件"><el-upload:action="uploadUrl"v-loading="loading":on-change="handleChange":on-remove="handleRemove"	:limit="1"accept=".xls,.xlsx"	     :default-file-list="fileList":before-upload="beforeAvatarUpload"><i class="el-icon-upload"></i><div class="el-dragger__text">点击文件进行上传</div><div class="el-upload__tip" slot="tip">只能上传xls/xlsx文件</div></el-upload></el-form-item><el-form-item><el-button type="primary" @click="addlist()" :loading="isLoading">导入</el-button><el-button @click="goback()">返回</el-button></el-form-item>

使用的是element-ui,使用的是vue解析excel方法,需要安装xslx,可参考

下面是方法:

  export default {data() {return {isLoading: false,fileList: [],// fileTemp:null,form: {       },uploadUrl: '',rules: {}}},methods: {handleRemove(file,fileList){this.file = null},handleChange(file, fileList){const fileReader = new FileReader();fileReader.onload = (ev) => {try {const data = ev.target.result;const workbook = XLSX.read(data, {type: 'binary'});// console.log(workbook)let sheet = Object.keys(workbook.Sheets)[0];var array = XLSX.utils.sheet_to_json(workbook.Sheets[sheet]);  //获得以第一列为键名的sheet数组对象var arrayStr = JSON.stringify(array).replace(/学号/g,"sid").replace(/姓名/g,"name").replace(/性别/g,"sex").replace(/身份证号/g,"idnumber").replace(/学院名称/g,"academy").replace(/专业名称/g,"major")array = JSON.parse(arrayStr);// console.log(array)this.form = array} catch (e) {console.log(e)}};fileReader.readAsBinaryString(file.raw);},addlist(form) {this.isLoading = !this.isLoadingthis.apiPost('admin/degree/addList', this.form).then((res) => {this.handelResponse(res, (data) => {_g.toastMsg('success', data)setTimeout(() => {this.goback()}, 1500)}, () => {this.isLoading = !this.isLoading})})},},created() {this.uploadUrl = window.HOST_g.closeGlobalLoading()},

这里使用了json字符串转化,将头标题汉字转化为数据表字段名来进行添加。

后台用的是ThinkPhp方法,接收到数组进行循环添加即可,然后返回data,显示成功和覆盖的条目数,这里就不列举了。

插入数据后,接下来是图片的导入:

<el-uploadref="upload"v-loading="loading":action="uploadurl":auto-upload="false":multiple="true":on-change="handleChange":on-remove="handleRemove":with-credentials="true"accept = ".jpg,":before-upload="beforeAvatarUpload"><i class="el-icon-upload"></i><div class="el-upload__text">点击文件进行上传</div><div class= "el-upload__tip" slot="tip">只能上传jpg文件,可进行批量选择</div>
</el-upload><el-form-item><el-button type="primary" @click="addimg()" :loading="isLoading">导入</el-button><el-button @click="goback()">返回</el-button>

可一次导入多张图片,图片名对应每个学生的身份证号(多张图片可用加后缀进行表示)。

export default {data() {return {isLoading: false,fileList: [],uploadurl:'',// ExcelDate:[],// fileTemp:null,form: [],uploadUrl: '',rules: {}}},methods: {handleRemove(file,fileList){this.handleChange(file,fileList);},handleChange (file, fileList) {// console.log(fileList);var files = [];for (let index = 0; index < fileList.length; index++) {const element = fileList[index];// console.log(element.name);// var index=element.name.lastIndexOf('.');// var tmp= element.name.substring(0,index)this.getBase64(element.raw).then(res => {files.push({"name":element.name,"base64data":res});})}this.form = files;},//将图片转为base64 加上 name属性赋值给数组,发送到后台getBase64 (file) {return new Promise(function (resolve, reject) {let reader = new FileReader()let imgResult = ''reader.readAsDataURL(file)reader.onload = function () {imgResult = reader.result        }reader.onerror = function (error) {reject(error)}reader.onloadend = function () {resolve(imgResult)}})},beforeAvatarUpload(file) {const isJPG = file.type === 'image/jpeg';const isLt3M = file.size / 1024 / 1024 < 3;if (!isJPG) {this.$message.error('上传头像图片只能是 JPG 格式!');}if (!isLt3M) {this.$message.error('上传头像图片大小不能超过 3MB!');}return isJPG && isLt3M;},addimg() {this.isLoading = !this.isLoadingthis.apiPost('admin/degree/addimg', this.form).then((res) => {this.handelResponse(res, (data) => {_g.toastMsg('success', data)setTimeout(() => {this.goback()}, 1500)}, () => {this.isLoading = !this.isLoading})})},},created() {this.uploadUrl = window.HOST_g.closeGlobalLoading()},

上面的操作包括base64转化和创建数组,将图片名、bas64图片发送给后台进行接收。

然后后台更新一下,就完成了。

 

更多推荐

vue.js实现excel和图片的导入

本文发布于:2024-03-15 07:48:51,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1738422.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:图片   vue   js   excel

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!