微信小程序实现上传多张图片、删除图片


Posted in Javascript onJuly 29, 2020

最近在做微信小程序,遇到上传多张图片到服务器,计算上传图片的张数,并且可以手动删除图片,下面是效果图

效果图:

微信小程序实现上传多张图片、删除图片

本来用的是小程序提供的 mp-uploader 上传图片的组件,无奈次组件删除效果不是我想要的,只能用 wx.chooseImage进行上传图片,在使用uplaodFile将图片发送给后台服务器。

下面直接展示代码:

wxml:

<view class="con_titles">
 <view class="con_left">
 <image src="../../images/comint.png"></image>
 <text class="titles_t">患者病历</text>
 </view>
 <view class="img_num">{{imgShow.length}}/6</view>
 
 </view>
 <view class="page__bd">
 <!-- <mp-uploader style='color:#353535' bindfail="uploadError" bindsuccess="uploadSuccess" select="{{selectFile}}" upload="{{uplaodFile}}" files="{{files}}" max-count="6" title="患者病历"></mp-uploader> -->
 
 <view class="add-image">
 <view class="images-boxc" wx:for="{{imgShow}}" wx:for-item="item" wx:key="image">
 <image class="image_size" data-index="{{index}}" data-src="{{item}}" src="{{item}}" bindtap="clickImage"></image>
 <image class="delete-image" data-index="{{index}}" src="../../images/delete_img.png" bindtap="deleteImage"></image>
 </view>
 <view class="images-add" wx:if="{{imgShow.length<6}}">
 <image class="image_size image_sizen" src="../../images/add_img.png" bindtap="chooseImage"></image>
 </view>
 </view>
</view>

wxss:

/* 上传图片 */
.images-boxc {
 position: relative;
 border: dashed 1px #bfbfbf;
 width: 139rpx;
 height: 139rpx;
 margin-right: 32rpx;
 margin-bottom: 32rpx;
}
.delete-image {
 position: absolute;
 width: 30rpx;
 height: 30rpx;
 right: 16rpx;
 top: 16rpx;
}
.add-image {
 display: flex;
 flex-wrap: wrap;
}
.image_size {
 width: 139rpx;
 height: 139rpx;
}
.image_sizen {
 height: 142rpx;
}

js:

data: {
 count: 6, //设置最多6张图片
 
 allImg: [],
 imgShow: [],
 
 },
// 上传图片
 chooseImage: function() {
 wx.showLoading({
 title: '加载中...',
 mask: true
 })
 var that = this;
 var imgShow = that.data.imgShow;
 var count = that.data.count - imgShow.length; //设置最多6张图片
 wx.chooseImage({
 count: count,
 sizeType: ['compressed'], // 可以指定是原图还是压缩图,默认二者都有
 sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有
 success: function(res) {
 console.log(res)
 that.uplaodFile(res)
 for (var i = 0, h = res.tempFilePaths.length; i < h; i++) {
 imgShow.push(res.tempFilePaths[i]);
 that.setData({
 imgShow: imgShow
 })
 }
 wx.hideLoading({
 title: '加载中...',
 mask: false
 })
 
 }
 })
 },
 // 删除图片
 deleteImage(e) {
 let self = this;
 let index = e.target.dataset.index;
 let imgShow = self.data.imgShow;
 let allImg = self.data.allImg;
 allImg.splice(index, 1);
 imgShow.splice(index, 1);
 this.setData({
 imgShow: imgShow,
 allImg: allImg
 })
 },
 previewImage: function(e) {
 console.log(this.data.files)
 wx.previewImage({
 current: e.currentTarget.id, // 当前显示图片的http链接
 urls: this.data.files // 需要预览的图片http链接列表
 })
 },
 selectFile(files) {
 console.log('files', files)
 // 返回false可以阻止某次文件上传
 },
 uplaodFile(files) {
 console.log('upload files', files)
 let that = this
 files.tempFilePaths.forEach(element => {
 util.uploadFile('/fastdfsServer/fileUpload', element, 'file', {}, function(res) { //上传本地图片地址到服务器 返回地址 存放到input提交时取值
 res = JSON.parse(res);
 if (res.responseCode == 0) {
 sysMsg.sysMsg("上传成功", 1000, 'success');
 that.setData({
 allImg: that.data.allImg.concat(res.responseBody)
 });
 } else {
 sysMsg.sysMsg("上传失败", 1500, 'error');
 }
 });
 
 });
 // 文件上传的函数,返回一个promise
 return new Promise((resolve, reject) => {
 resolve({
 urls: files.tempFilePaths
 });
 setTimeout(() => {
 reject('some error')
 }, 10000)
 
 })
 
 },
 uploadError(e) {
 console.log('upload error', e.detail)
 },
 uploadSuccess(e) {
 // this.setData({
 // allImg: this.data.allImg.concat(e.detail.urls[0])
 // });
 console.log('upload success', e.detail, e.detail.urls)
 
},

为大家推荐现在关注度比较高的微信小程序教程一篇:《微信小程序开发教程》小编为大家精心整理的,希望喜欢。

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

Javascript 相关文章推荐
飞鱼(shqlsl) javascript作品集
Dec 16 Javascript
javascript new 需不需要继续使用
Jul 02 Javascript
在JavaScript中操作时间之setYear()方法的使用
Jun 12 Javascript
javascript实现数字倒计时特效
Mar 30 Javascript
基于JQuery打造无缝滚动新闻步骤详解
Mar 31 Javascript
js中获取时间new Date()的全面介绍
Jun 20 Javascript
jQuery实现简单的抽奖游戏
May 05 jQuery
Vue AST源码解析第一篇
Jul 19 Javascript
原生js获取left值和top值的三种方法
Aug 02 Javascript
Vuex提升学习篇
Jan 11 Javascript
为什么Vue3.0使用Proxy实现数据监听(defineProperty表示不背这个锅)
Oct 14 Javascript
js实现登录时记住密码的方法分析
Apr 05 Javascript
js模拟实现百度搜索
Jun 28 #Javascript
微信小程序地图实现展示线路
Jul 29 #Javascript
vuex实现购物车的增加减少移除
Jun 28 #Javascript
JavaScript实现Tab标签页切换的最简便方式(4种)
Jun 28 #Javascript
vuex实现购物车功能
Jun 28 #Javascript
JavaScript图像放大镜效果实现方法详解
Jun 28 #Javascript
详细分析Node.js 模块系统
Jun 28 #Javascript
You might like
一个高ai的分页函数和一个url函数
2006/10/09 PHP
php调用新浪短链接API的方法
2014/11/08 PHP
解决在laravel中auth建立时候遇到的问题
2019/10/15 PHP
Prototype String对象 学习
2009/07/19 Javascript
html 锁定页面(js遮罩层弹出div效果)
2009/10/27 Javascript
JS动态加载当前时间的方法
2015/02/09 Javascript
jQuery使用prepend()方法在元素前添加内容用法实例
2015/03/26 Javascript
ECMAScript中函数function类型
2015/06/03 Javascript
在JavaScript中处理字符串之link()方法的使用
2015/06/08 Javascript
跟我学习javascript解决异步编程异常方案
2015/11/23 Javascript
基于javascript数组实现图片轮播
2016/05/02 Javascript
jQuery右下角悬浮广告实例
2016/10/17 Javascript
jquery popupDialog 使用 加载jsp页面的方法
2016/10/25 Javascript
微信小程序 支付功能(前端)的实现
2017/05/24 Javascript
nodejs实现超简单生成二维码的方法
2018/03/17 NodeJs
vue构建动态表单的方法示例
2018/09/22 Javascript
如何在JS文件中获取Vue组件
2020/09/16 Javascript
在Python的Django框架中为代码添加注释的方法
2015/07/16 Python
python八大排序算法速度实例对比
2017/12/06 Python
对pandas中iloc,loc取数据差别及按条件取值的方法详解
2018/11/06 Python
Python 利用高德地图api实现经纬度与地址的批量转换
2019/08/14 Python
python3使用GUI统计代码量
2019/09/18 Python
HTML5仿手机微信聊天界面
2016/03/18 HTML / CSS
理肤泉美国官网:La Roche-Posay
2018/01/17 全球购物
美国乒乓球设备、配件和服装品牌:Killerspin
2020/06/07 全球购物
寻找迷宫的一条出路,o通路;X:障碍
2016/07/10 面试题
预备党员党校学习自我评价分享
2013/11/12 职场文书
幼儿园秋游活动方案
2014/01/21 职场文书
婚庆公司的创业计划书
2014/01/22 职场文书
会计工作决心书
2014/03/11 职场文书
租车协议书范本
2014/04/22 职场文书
小学语文教师年度考核个人总结
2015/02/05 职场文书
2015年电话客服工作总结
2015/05/18 职场文书
法人身份证明书
2015/06/18 职场文书
《活见鬼》教学反思
2016/02/24 职场文书
Ajax实现异步加载数据
2021/11/17 Javascript