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


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 相关文章推荐
jquery鼠标滑过提示title具体实现代码
Aug 06 Javascript
jQuery中insertAfter()方法用法实例
Jan 08 Javascript
JS+CSS实现带小三角指引的滑动门效果
Sep 22 Javascript
学习JavaScript设计模式(继承)
Nov 26 Javascript
【经典源码收藏】jQuery实用代码片段(筛选,搜索,样式,清除默认值,多选等)
Jun 07 Javascript
jQuery Easyui使用(一)之可折叠面板的布局手风琴菜单
Aug 17 Javascript
详解Eslint 配置及规则说明
Sep 10 Javascript
详解promise.then,process.nextTick, setTimeout 以及 setImmediate的执行顺序
Nov 21 Javascript
小程序实现左右来回滚动字幕效果
Dec 28 Javascript
javascript实现简易聊天室
Jul 12 Javascript
layui关闭弹窗后刷新主页面和当前更改项的例子
Sep 06 Javascript
微信小程序接入vant Weapp组件的详细步骤
Oct 28 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
深入PHP变量存储的详解
2013/06/13 PHP
解析php取整的几种方式
2013/06/25 PHP
php中Y2K38的漏洞解决方法实例分析
2014/09/22 PHP
php pdo操作数据库示例
2017/03/10 PHP
Javascript Request获取请求参数如何实现
2012/11/28 Javascript
JavaScript根据数据生成百分比图和柱状图的实例代码
2013/07/14 Javascript
JS教程:window.location使用方法的区别介绍
2013/10/04 Javascript
flash+jQuery实现可关闭及重复播放的压顶广告
2015/04/15 Javascript
jquery实现鼠标滑过小图查看大图的方法
2015/07/20 Javascript
基于Arcgis for javascript实现百度地图ABCD marker的效果
2015/09/12 Javascript
浅谈js中的延迟执行和定时执行
2016/05/31 Javascript
DIV+CSS+jQ实现省市联动可扩展
2016/06/22 Javascript
JS正则截取两个字符串之间及字符串前后内容的方法
2017/01/06 Javascript
javascript常用经典算法详解
2017/01/11 Javascript
微信小程序 九宫格实例代码
2017/01/21 Javascript
Node.js连接MongoDB数据库产生的问题
2017/02/08 Javascript
jQuery实现移动端Tab选项卡效果
2017/03/15 Javascript
使用Require.js封装原生js轮播图的实现代码
2017/06/15 Javascript
js中less常用的方法小结
2017/08/09 Javascript
Vue + ts实现轮播插件的示例
2020/11/10 Javascript
超详细小程序定位地图模块全系列开发教学
2020/11/24 Javascript
Python的lambda匿名函数的简单介绍
2013/04/25 Python
python中的__init__ 、__new__、__call__小结
2014/04/25 Python
python获取文件版本信息、公司名和产品名的方法
2014/10/05 Python
简单的Python2.7编程初学经验总结
2015/04/01 Python
Python方法的延迟加载的示例代码
2017/12/18 Python
详解用Python练习画个美队盾牌
2019/03/23 Python
Python在centos7.6上安装python3.9的详细教程(默认python版本为2.7.5)
2020/10/15 Python
美国最大的购物网站:Amazon.com(亚马逊美国)
2020/05/23 全球购物
介绍一些UNIX常用简单命令
2014/11/11 面试题
女大学生毕业找工作的自我评价
2013/10/03 职场文书
大专生毕业的自我评价
2014/02/06 职场文书
协议书范本
2014/04/23 职场文书
浅析MySQL如何实现事务隔离
2021/06/26 MySQL
深入理解mysql事务隔离级别和存储引擎
2022/04/12 MySQL
vue项目配置sass及引入外部scss文件
2022/04/14 Vue.js