vue中-iview的upload上传图片-获取本地图片绝对路径-在前端实现图片预览

在用iview的upload上传图片的时候,想要实现图片的预览。 但是在iview给的例子中,是每上传一个图片触发一次上传事件,调一次接口,后台将图片存入数据库,再回传给前端,这样实现图片在前端的显示。这个方法对于上传多张图片,无疑很不现实。 于是就有了下面的方法。 想要实现上传多张图片,上传的图依次显示出来,点击提交,实现同时上传,只调一次接口,后台一次性将多张图片存入数据库。 在图片上传前 'handleBeforeUpload' 事件中加入以下代码,获取的_base64即为本地图片的绝对路径,将其存起来,在赋值到img的src路径,即可实现图片在上传前的显示,实现图片的预览 const reader = new FileReader() reader.readAsDataURL(file) reader.onload = () => { const _base64 = reader.result console.log(_base64) } 整体代码copy //图片上传前事件 handleBeforeUpload (file) { this.file = file //需要传给后台的file文件 const reader = new FileReader() reader.readAsDataURL(file) reader.onload = () => { const _base64 = reader.result this.imgUrl = _base64 //将_base64赋值给图片的src,实现图片预览 } return false//阻止图片继续上传,使得form表单提交时统一上传 }

June 10, 2019 · 1 min · jiezi

elementUI中form表单的upload上传图片及校验总结

自定义校验方法,因为我的项目是,分情况,可以选择是否有图,所以我定义了一个变量hasFmt,当他为false的时候,才会要求上传,走这个校验方法,rules里声明这个方法 var valiIcon = (rule, value, callback) => { // 图片验证 if (!this.hasFmt) { callback(new Error(‘请上传图片’)); } else { callback(); } icon:[ {required:true, validator: valiIcon, trigger: ‘change’ } // 图片验证 ]根据情况去切换hasFmt的值 就可以控制是否校验失败啦~~ 这就是校验图片的思路了,是不是很简单呢~~~再来说说表单带着图片一起上传fileChange(file,fileList){ this.bannerForm.filename = file.name; this.bannerForm.file = file.raw; console.log(file.raw) if(fileList.length>0){ this.hasFmt = true; }},例如,file change的时候,当fileList有值,就可以断定已经选取了图片了,讲file流保存好,(我这里是:this.bannerForm.file = file.raw;)并且可以把hasFmt变为ture啦,再者,file remover的时候 回显的时候, 等等,都要根据情况改变hasFmt的值,来达到图片的校验上传是这样的:this.$refs.bannerForm.validate((valid) => { if(valid){ let param = new FormData(); this.toBannerBtn = true; param.append(‘file’,this.bannerForm.file,this.bannerForm.filename); param.append(’tokenId’,this.$store.state.user.tokenId); param.append(’titleShort’,this.bannerForm.title_short); param.append(‘bannerType’,‘1’); param.append(’linkId’,this.bannerForm.link); param.append(‘articleId’,this.bannerForm.articleId); console.log(param) this.$post(‘bannerInfo/save’,param).then(res =>{ // console.log(res); if(res.code == 0){ this.$message({ type: ‘success’, message: res.msg }); setTimeout(() => { this.newsList(); }, 1000); this.bannerForm={}; this.bannerDialog = false; }else{ this.$message({ type: ‘warning’, message: res.msg?res.msg:‘出错了’ }); } this.toBannerBtn = false; }) } })表单校验后,就可以进行上传啦,采用的是new FormData();取值上传的,要注意 ,取消其序列号,我在公共的上传方法里封装好了,所以这里就直接调用啦小可爱们,如果觉得学到了一点点,麻烦点个赞哟,灰常感谢啦~ ...

December 28, 2018 · 1 min · jiezi

vue+elementUI的图片即时上传

后台管理项目,用到的是vue+elementUI的方式,upload板块,api个人感觉还是不够详尽,现在,来说一下关于立即上传的问题.主要用到的是http-request的覆盖原有上传方式,(因为我需要传token给后台),所以action的值可以写为空串.页面代码:<el-upload class=“upload-demo” name=“usersFile” action="" :on-preview=“handlePreview” :http-request=“uploadFile” :on-remove=“handleRemove” :auto-upload=“true” :on-exceed=“handleExceed” :file-list=“fileList”> <el-button size=“mini” type=“primary”>批量上传</el-button></el-upload>可以看到,http-request对应的方法uploadFile是重点:uploadFile(file){ let formDatas = new FormData(); formDatas.append(‘usersFile’, file.file); formDatas.append(’tokenId’,this.$store.state.user.tokenId); this.$post(’/yourUrl’,formDatas).then(res =>{ if(res.code == 0){ this.$message({ message: res.msg, type: ‘success’ }); }else{ this.$message({ message: res.msg?res.msg:‘操作失败’, type: ’error’ }); } }) },说明:其中字段usersFile就是后台要的key,值就是你选择的文件 ,这样就实现了立即上传.

December 24, 2018 · 1 min · jiezi