微信小程序多图上传

最近在写小程序的商品上传,为方便需要使用多张图片的上传的功能。因为小程序不支持数组的多张图片同时上传,然后根据自己的需求创建了一个组件希望能够帮到大家

效果图

创建一个图片上传的promise

uploadFilePromise(filePath, Authorization) {

return new Promise(function(resolve, reject) {

wx.uploadFile({

url: `${DOMAIN}File/Image/upload`,

filePath,

name: 'file',

header: {

Authorization,

},

success: res => {

// 触发图片上传事件

let data = JSON.parse(res.data);

if (data.code != SUCCESS_CODE) { //SUCCESS_CODE为本项目请求成功的判断无需在意

wx.showToast({

title: data.message || '上传失败',

icon: 'none'

})

} else {

resolve(res)

}

},

fail: res => {

reject(res)

}

});

})

},

创建一个promise.all (多个图片上传成功后再改变dom)

chooseImage(){

wx.chooseImage({

count,

sizeType: ['original', 'compressed'],

sourceType: ['album', 'camera'],

success(res) {

const tempFilePaths = res.tempFilePaths; //拿到选择的图片地址

that.triggerEvent('disableBtn', {}, {}); //上传过程中禁用父组件中的保存按钮,防止图片未上传成功

let promiseList = tempFilePaths.map(temp => that.uploadFilePromise(temp, Authorization)); //获取promise 队列数组

Promise.all(promiseList).then((result) => {

let uploadImgList = result.map(item => ({ file_key: JSON.parse(item.data).data.key, url: JSON.parse(item.data).data.url })).reverse();

imgList.unshift(...uploadImgList); //将新上传的图片从头部插入原图片数组中

that.triggerEvent('Upload', { imgList, key }) //上传成功将新的图片数组给到组件

})

}

})

}

完整js 文件

import Dialog from '../../../../miniprogram_npm/@vant/weapp/dialog/dialog';

import {

DOMAIN,

TOKEN_KEY,

SUCCESS_CODE

} from "../../../../configs";

Component({

/**

* 组件的属性列表

*/

properties: {

imgList: { //图片列表

type: [Array],

value: [],

},

max: { //最大可以上传数

type: [Number],

value: 10

},

key: { //图片列表key

type: [String],

value: ''

}

},

/**

* 组件的初始数据

*/

data: {

},

methods: {

upload(e) {

const {key,max} = e.target.dataset;

let imgList = this.data.imgList,

listLen=imgList.length,

count = parseInt(max - listLen) > 9 ? 9 : parseInt(max - listLen),

that = this;

var Authorization = wx.getStorageSync(TOKEN_KEY);

if (listLen >= max) {

wx.showToast({

title: `最多上传${max}张图片`,

icon: 'none',

duration: 2000

});

return false;

}

wx.chooseImage({

count,

sizeType: ['original', 'compressed'],

sourceType: ['album', 'camera'],

success(res) {

const tempFilePaths = res.tempFilePaths;

that.triggerEvent('disableBtn', {}, {});

let promiseList = tempFilePaths.map(temp => that.uploadFilePromise(temp, Authorization));

Promise.all(promiseList).then((result) => {

let uploadImgList = result.map(item => ({ file_key: JSON.parse(item.data).data.key, url: JSON.parse(item.data).data.url })).reverse();

imgList.unshift(...uploadImgList);

that.triggerEvent('Upload', { imgList, key })

})

}

})

},

uploadFilePromise(filePath, Authorization) {

return new Promise(function(resolve, reject) {

wx.uploadFile({

url: `${DOMAIN}File/Image/upload`,

filePath,

name: 'file',

header: {

Authorization,

},

success: res => {

// 触发图片上传事件

let data = JSON.parse(res.data);

if (data.code != SUCCESS_CODE) {

wx.showToast({

title: data.message || '上传失败',

icon: 'none'

})

} else {

resolve(res)

}

},

fail: res => {

reject(res)

}

});

})

},

delete(e) {

const { key, index } = e.target.dataset;

Dialog.confirm({

selector: '#create-dialog',

title: '提示',

message: '确认删除该图吗?'

}).then(() => {

this.triggerEvent('Delete', {key,index})

}).catch(() => {

// on cancel

})

},

}

})

创建一个wxml

删除

写上样式wxss

.product-img-list {

display: flex;

flex-wrap: wrap;

}

.product-img-list .img-box {

width: 100rpx;

margin-right: 24rpx;

display: flex;

flex-direction: column;

align-items: center;

color: #909090;

font-size: 28rpx;

margin-top: 32rpx;

}

.img-box .product-img{

width: 100rpx;

height: 100rpx;

margin-bottom: 24rpx;

}

.add-image-icon {

width: 100rpx;

height: 100rpx;

margin-top: 32rpx;

}

父组件的调用–wxml

7.父组件的调用 --js

//上传图片

uploadProImg(e) {

let form = this.data.form,

key = e.detail.key,

imgList = e.detail.imgList;

form[key] = imgList;

this.setData({ form, btnDisabled: false })

},

//上传按钮禁用

disableBtn(e) {

this.setData({ btnDisabled: true })

},

//删除图片

deleteProImg(e) {

let form = this.data.form,

key = e.detail.key,

index = e.detail.index,

keyList = form[key];

keyList.splice(index, 1);

form[key] = keyList;

this.setData({ form })

},

vant weapp 多选上传图片_微信小程序结合vant weapp ui实现多图上传组件相关推荐

  1. vant weapp 多选上传图片_微信小程序使用Vant Weapp组件库的方法步骤

    地址:https://youzan.github.io/vant/#/zh-CN/intro 一.引入Vant组件库 1.首先运行 npm init 就会生成 package.json 2.运行 np ...

  2. vant weapp 多选上传图片_微信小程序:使用vant实现上传图片功能

    使用vant的Uploader组件 我们使用上传的组件是vant-weapp,这样可以大大的提高我们的开发效率.使用Uploader组件首先在全局配置app.js引入该组件,也可以在页面配置json中 ...

  3. 微信小程序云开发CMS内容管理平台csv上传乱码或失败的解决方法

    一.新建Excel并编辑数据: 二.Excel 编辑好后另存为csv文件(直接导入微信小程序云开发数据库会出现中文乱码): 三.csv文件直接改后缀名为.txt,然后用记事本打开(如首行出现空字段需删 ...

  4. [微信小程序]WebView内嵌H5实现本地文件上传

    [官方文档] 小程序与H5如何互相跳转 小程序与H5交互以上传文件为例 微信小程序开放能力web-view使用之h5页面与小程序页面交互传值 快速小程序开发之微信小程序内嵌 H5 微信小程序web-v ...

  5. 微信小程序选择手机相册里的图片并上传到页面

    微信小程序获取手机相册里的图片并传到页面上 index.wxml代码 // 相册中的照片 <button bindtap='handleChooseAlbum'>选中图片</butt ...

  6. 微信小程序富文本编辑器editor初体验-图片上传

    https://developers.weixin.qq.com/miniprogram/dev/component/editor.html 以前没有小程序富文本编辑器,只能输入文字,图片上传后,在服 ...

  7. java微信上传图片_微信小程序图片上传java后台(前后端代码)

    小程序代码 upload:function(e){ var that = this; wx.showActionSheet({ itemList: ['从相册选择','拍照'], itemColor: ...

  8. 【微信小程序云开发】1分钟学会实现上传、下载、预览、删除图片,并且以九宫格展示图片

    大家好,我叫小秃僧 这篇文章是讲解云开发如何上传.下载.预览.删除图片,并且以九宫格展示图片的功能 学习目录 1. 实现效果 2.JavaScript代码 3.wxml代码 4.wxss代码 1. 实 ...

  9. 微信提交表单到服务器,微信小程序页面表单如何跟图片一起上传服务器

    拆开写. 表单提交是 wx.request 上传图片是 wx.uploadFile 你需要写一个通用图片上传接口,上传图片后台返回图片的url.这个通用接口在任何需要提交图片的表单都可以用到. 添加图 ...

最新文章

  1. Linux下软件安装方法汇总
  2. mysql如何快速插入一千万条数据_如何快速安全的插入千万条数据?
  3. 渲染服务器位置,如何用服务器做渲染
  4. ROS配置分布式通信
  5. (STL,set)安迪的第一个字典
  6. struts国际化java_java框架篇---Struts2 本地化/国际化(i18n)
  7. 36.母板的介绍与使用
  8. opengl (1) 基本API的熟悉
  9. Redis集群方案介绍
  10. VB中常用的的ASCII码chr()对应表
  11. php 发送curl跨域请求,php跨域传输(curl)
  12. Win10下安装GrADS
  13. jQuery Mobile 【弹窗】
  14. quicktime ogv_Windows的QuickTime已死,应卸载以确保安全
  15. 阿里达摩院发布2019十大科技趋势:数字身份将成为第二张身份证
  16. oracle12c性能测试,Oracle12c IMO 测试
  17. Android进程永生技术终极揭秘:进程被杀底层原理、APP应对技巧
  18. [AHK]通达信联动到同花顺下单
  19. 欧拉角、四元数与旋转
  20. 【Python】进制、计算机中的单位、编码、数据类型、索引、字符串切片、字符串的功能方法

热门文章

  1. VNote 笔记软件 相关文件 及 使用技巧(更新中)
  2. 手机端上线,破解高架区域偏航检测难题,高德提出工业级轻量模型ERNet
  3. 龙格库塔c 语言编程实现,龙格库塔C 语言编程实现
  4. 厉害了!101岁老人挑战高空跳伞,被纳入吉尼斯世界纪录
  5. 服务器状态显示异常,App常见异常状态
  6. php抓取数据并且保存到Excel
  7. python序列求和
  8. linux端口详解大全
  9. Mr.Robot靶机 - 机器人先生
  10. 面试常用:Linux内核级同步机制--futex