侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

vue图片上传组件使用详解

微信(小程序)  /  管理员 发布于 3年前   151

vue图片上传组件,供大家参考,具体内容如下

最近在做项目的时候顺便补充了一下公司项目的公共组件库,刚刚手头事情告一段落,就来做个笔记。

首先来看看最终效果

1.不允许删除

 

2.允许用户删除(显示删除按钮)

实现的效果就是上图显示内容

接下来说说组件布局那部分直接上代码了

上面代码中的kk-icon是自定义的图标组件,只是多了个接受颜色和大小的功能,你们自己写一个替换就行了。然后动态定义它的class,实现显隐就结束了。

随手贴个样式

接下来看看实现逻辑

借助input type="file"实现图片选择,是否允许多选图片的话是通过给input的multiple属性。(其他直接备注在里面了)
在组件中接收父组件传来的图片数量限制,是否开启删除操作,上传图片地址,预览地址等

props: ['imgNum','title','upUrl','showUrl','showDel'],

title 上传组件的标题
imgNum 上传图片数量限制
upUrl 设置上传图片地址
showUrl设置图片回显地址
showDel是否允许删除图片
changeNum 图片改变时,触发父组件中的方法

当选择图片确定后就会触发change,因此我在@change="onUpload" 进行上传,上传使用了formData

// 上传操作onUpload (e) { let photoFile = e.target let val = e.target.value // 判断是否符合上传条件 if (photoFile.files.length === 0) return false for (let i = 0; i < photoFile.files.length; i++) { this.fileAdd(photoFile.files[i],i) }}

上传操作中触发图片后续处理方法fileAdd

因为后台要求拿到的图片地址是一串字符串,所以我在下面中使用join() 进行数组转化处理(因为后台不支持接受图片数组,因此我这个上传多选图片之后上传也是单张上传)

// 添加图片fileAdd (file,index) { let csrf_token = this.getCookie('XSRF-TOKEN'); let formFile = new FormData(); let imgName = 'img0'; formFile.append(imgName, file); formFile.append("_token", csrf_token); let name = file.name let size = file.size let types = '.jpg,.jpeg,.png,.gif' //文件格式 let fileExt = name.substring(name.lastIndexOf('.')).toLowerCase() let result = types.indexOf(fileExt) if (result < 0) {  //验证图片格式 this.$dialog.toast({  mes: '图片格式不正确',  timeout: 1000 }) return false } if (size > 1 * 1024 * 1024) { this.$dialog.toast({  mes: '图片大小不能大于1M',  timeout: 1000 }) return false } if (this.fileList.length >= this.uploadNum) { this.$dialog.toast({  mes: '图片最多只能上传' + this.uploadNum + '张',  timeout: 1000 }) return false } axios.post(this.upUrl,formFile) .then((res) => {  this.upNum = this.fileList.length + 1; //计算图片数量  this.fileList.push(file);    //添加进图片数组  let imgUrl = this.showUrl + res.data.data; //图片回显地址  let upImg = res.data.data;    //传给后台的图片地址  this.imgList.push(imgUrl);  this.upImgList.push(upImg);  let upImgAll = this.upImgList.join(',');  this.$emit('input', upImgAll); }).catch((err) => {  console.log(err); })},

删除图片操作

我这删除仅仅是对最后提交的图片数组进行处理,并未对上传到图片服务器上的图片进行移除处理

// 删除图片delImg (index) { this.imgList.splice(index, 1); this.fileList.splice(index, 1); this.upNum = this.imgList.length; let imgAll = this.imgList.join(','); this.$emit('input', imgAll);},

最后我在组件中监听了图片改变

watch: { imgList () {  this.$emit('changeNum'); //触发父组件中验证资料是否完整的方法 } },

就是这样了,一个简易的上传组件(写的不是很好,轻喷),还有可以优化的地方,后面改完再看看吧

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

您可能感兴趣的文章:

  • 使用Vue实现图片上传的三种方式
  • 基于VUE选择上传图片并页面显示(图片可删除)
  • vue.js 上传图片实例代码
  • Vue.js 2.0 移动端拍照压缩图片上传预览功能
  • vue项目中使用axios上传图片等文件操作
  • vue.js 图片上传并预览及图片更换功能的实现代码
  • Vue2.0实现调用摄像头进行拍照功能 exif.js实现图片上传功能
  • vue-quill-editor实现图片上传功能
  • vue.js图片转Base64上传图片并预览的实现方法
  • 使用vue构建一个上传图片表单


  • 上一条:
    微信公众平台开发之配置与请求
    下一条:
    微信公众平台开发关注及取消关注事件的方法
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 小程序开发之跳转微信直播示例api(0个评论)
    • 在uni_app中开发小程序之常用功能示例代码汇总(0个评论)
    • 小程序开发之多端框架:taro(0个评论)
    • 微信小程序前端使用七牛云官方SDK上传七牛云代码示例(0个评论)
    • 百度小程序审核未通过,真机审核存在点击返回键退出小程序...解决方式之一tabBar(0个评论)
    • 近期文章
    • 在laravel框架中的5个HTTP客户端技巧分享(0个评论)
    • 在go语言中使用FFmpeg库实现PCM音频文件编码为mp3格式文件流程步骤(0个评论)
    • gopacket免安装Pcap实现驱动层流量抓包流程步骤(0个评论)
    • 在laravel项目中实现密码强度验证功能推荐扩展包:password-strength(0个评论)
    • 在go语言中用filepath.Match()函数以通配符模式匹配字符串示例(0个评论)
    • Laravel Response Classes 响应类使用优化浅析(0个评论)
    • mysql中sql_mode的各模式浅析(0个评论)
    • 百度文心一言今天发布,个人第一批内测体验记录,不好别打我(0个评论)
    • 嘿加密世界让我们谈谈在共识中将中本聪主流化(0个评论)
    • 在go语言中寻找两个切片或数组中的相同元素/共同点/交集并集示例代码(0个评论)
    • 近期评论
    • 博主 在

      2023年国务院办公厅春节放假通知:1月21日起休7天中评论 @ xiaoB 你只管努力,剩下的叫给天意;天若有情天亦老,..
    • xiaoB 在

      2023年国务院办公厅春节放假通知:1月21日起休7天中评论 会不会春节放假后又阳一次?..
    • BUG4 在

      你翻墙过吗?国内使用vpn翻墙可能会被网警抓,你需了解的事中评论 不是吧?..
    • 博主 在

      go语言+beego框架中获取get,post请求的所有参数中评论 @ t1  直接在router.go文件中配就ok..
    • Jade 在

      如何在MySQL查询中获得当月记录中评论 Dear zongscan.com team, We can skyroc..
    • 2017-10
    • 2018-01
    • 2020-03
    • 2021-06
    • 2021-10
    • 2022-03
    • 2023-02
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客