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


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 相关文章推荐
比较全的JS checkbox全选、取消全选、删除功能代码
Dec 19 Javascript
combox改进版 页面原型参考dojo的,比网上jQuery的那些combox功能强,代码更小
Apr 15 Javascript
jQuery 动态云标签插件
Nov 11 Javascript
js实现用户离开页面前提示是否离开此页面的方法(包括浏览器按钮事件)
Jul 18 Javascript
详解JavaScript中常用的函数类型
Nov 18 Javascript
jquery插件autocomplete用法示例
Jul 01 Javascript
JavaScript中省略元素对数组长度的影响
Oct 26 Javascript
vue组件Prop传递数据的实现示例
Aug 17 Javascript
详解如何在Vue里建立长按指令
Aug 20 Javascript
vue-froala-wysiwyg 富文本编辑器功能
Sep 19 Javascript
bootstrap table实现iview固定列的效果实例代码详解
Sep 30 Javascript
基于Vue全局组件与局部组件的区别说明
Aug 11 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获得当前的脚本网址
2007/12/10 PHP
php 删除记录同时删除图片文件的实现代码
2010/05/12 PHP
PHP实现动态删除XML数据的方法示例
2018/03/30 PHP
jquery获取下拉列表的值为null的解决方法
2011/03/18 Javascript
jquery图片上下tab切换效果
2011/03/18 Javascript
JS分页效果示例
2013/10/11 Javascript
angularJS 中input示例分享
2015/02/09 Javascript
bootstrap模态框实现拖拽效果
2016/12/14 Javascript
手机端js和html5刮刮卡效果
2020/09/29 Javascript
进阶之初探nodeJS
2017/01/24 NodeJs
Angular5中调用第三方js插件的方法
2018/02/26 Javascript
npm全局模块卸载及默认安装目录修改方法
2018/05/15 Javascript
bootstrapTable+ajax加载数据 refresh更新数据
2018/08/31 Javascript
送你43道JS面试题(收藏)
2019/06/17 Javascript
使用vue-router切换页面时实现设置过渡动画
2019/10/31 Javascript
[52:20]VP vs VG Supermajor小组赛 B组胜者组决赛 BO3 第一场 6.2
2018/06/03 DOTA
Python 匹配任意字符(包括换行符)的正则表达式写法
2009/10/29 Python
python实现排序算法
2014/02/14 Python
Python使用代理抓取网站图片(多线程)
2014/03/14 Python
Python的collections模块中namedtuple结构使用示例
2016/07/07 Python
Python实现连接postgresql数据库的方法分析
2017/12/27 Python
Python 查看list中是否含有某元素的方法
2018/06/27 Python
Python中反射和描述器总结
2018/09/23 Python
Python中的asyncio代码详解
2019/06/10 Python
PyQt5创建一个新窗口的实例
2019/06/20 Python
python异步实现定时任务和周期任务的方法
2019/06/29 Python
基于Python实现扑克牌面试题
2019/12/11 Python
html5指南-1.html5全局属性(html5 global attributes)深入理解
2013/01/07 HTML / CSS
Html5 页面适配iPhoneX(就是那么简单)
2019/09/05 HTML / CSS
什么是WEB控件?使用WEB控件有哪些优势?
2012/01/21 面试题
介绍下java.util.Arrays类
2012/10/16 面试题
机关财务管理制度
2014/01/17 职场文书
2014年小学生教师节演讲稿范文
2014/09/10 职场文书
领导班子党的群众路线教育实践活动对照检查材料
2014/09/25 职场文书
医德医风个人工作总结2014
2014/11/14 职场文书
php将xml转化对象的实例详解
2021/11/17 PHP