资源参考

组件免费下载地址

概述

微信小程序原生上传图片功能封装,具体使用根据个人情况而定。

组件自定义属性与方法描述

  • isShow:布尔值,默认为true true:不显示上传图标 false:显示上传图标
  • count:Number类型,上传图片张数,总计默认最多9张
  • showUrl: Array类型,组件绑定值(后台返回已上传图片数据)
  • uploadUrl: String类型,上传图片的后台接口
  • bindmyevent:function类型,自定义事件

适用场景

  • 微信小程序原生组件
  • 微信小程序授权校验之后,进行拍照
  • 可以统计本次上传图片的失败次数
  • 样式根据自己需要自行调整
  • 图片可删除
  • 图片可预览

使用方式介绍

// 父组件  js文件
Page({data: {formData: {imgUrl: []},countPic: 9, //上传图片最大数量showImgUrl: "", //路径拼接,一般上传返回的都是文件名,uploadImgUrl: '/wechatApp/fireEye/imageUpload'},//监听组件事件,返回的结果myEventListener: function (e) {let currLabel = `formData.imgUrl`let currArray = e.detailthis.setData({[currLabel]: currArray})}})
// 父组件 wxml
<view class="form-item">\<view class="item-label">隐患照片:</view><uploadImages style="flex:1" bindmyevent="myEventListener" count='{{countPic}}' showUrl="{{formData.imgUrl}}"  uploadUrl="{{uploadImgUrl}}"></uploadImages>
</view>
// 父组件 json 组件引入
{"usingComponents": {"uploadImages": "/pages/components/uploadImages",}
}
// 图片上传组件  js文件
// component/uploadImages/index.js
import ipConfig from '../../../utils/ipConfig'
Component({/*** 组件的属性列表*/properties: {count: { //最多选择图片的张数,默认9张type: Number,value: 9},uploadUrl: { //图片上传的服务器路径type: String,value: ''},isShow: {// 隐藏上传按钮type: Boolean},showUrl: { //上传图片对象type: Array,value: [],observer: function (newVal) {if (newVal == null) return;this.setData({detailPics:JSON.parse(JSON.stringify(newVal))})}}},/*** 组件的初始数据*/data: {detailPics: [], //上传的结果图片集合isTakePhoto: false,timer: null,isFault: 0, // 记录上传图片失败个数currRequestNum: 0, // 记录本次调用接口次数currSelectPicNum: 0,// 记录本次选择上传图片个数currUrl: [], //记录本次上传图片地址集合baseUrl:ipConfig.baseUrl},/*** 组件的方法列表*/methods: {// 删除图片deletePic(e){let that = thislet currPic = this.data.detailPicscurrPic.splice(e.currentTarget.dataset.index,1)that.setData({detailPics:currPic})that.triggerEvent('myevent', that.data.detailPics)//结果返回调用的页面},// 图片预览previewImage(e) {let array = []this.data.detailPics.forEach(item => {array.push(this.data.baseUrl+item)})wx.previewImage({current:array[e.currentTarget.dataset.id],urls: array,})},uploadDetailImage: function (e) { //这里是选取图片的方法var that = this;// 每次点击 重置本次选择上传图片个数、本次发起请求个数、本次上传图片故障数量that.setData({currSelectPicNum: 0,currRequestNum: 0,isFault: 0,currUrl:[]})//权限判断wx.getSetting({success(res) {if (!res.authSetting['scope.camera']) {wx.authorize({scope: 'scope.camera',success() {//直接打开摄像头if (!that.data.isTakePhoto) {that.getTakePhoto()}},fail(err) {wx.showModal({title: '提示',content: '摄像头开启失败!!!',cancelText: '退出',confirmText: '去开启',success(res) {if (res.confirm) {// 开启wx.openSetting()} else if (res.cancel) {wx.navigateBack({delta: -1,})}}})}})} else {// 直接打开摄像头if (!that.data.isTakePhoto) {that.getTakePhoto()}}}})},getTakePhoto() {let that = thisif (that.data.count == that.data.detailPics.length) {wx.showToast({title: '至多上传' + that.data.count + '张图片',mask: true,duration: 500,icon:'error'})return false}wx.chooseImage({count: that.data.count-that.data.detailPics.length, // 最多可以选择的图片张数,默认9sizeType: ['original', 'compressed'], // original 原图,compressed 压缩图,默认二者都有sourceType: ['album', 'camera'], // album 从相册选图,camera 使用相机,默认二者都有success: function (res) {var imgs = res?.tempFilePaths || [];that.setData({currSelectPicNum:imgs.length})wx.showLoading({title: '上传中...',mask: true,icon:'loading'})imgs?.forEach(item => {that.uploadimg({url: ipConfig.baseUrl + that.data.uploadUrl, //这里是你图片上传的接口path: item, //这里是选取的图片的地址数组header: {'content-type': 'application/x-www-form-urlencoded','wx-token': wx.getStorageSync('Swrh_token'),"openId": wx.getStorageSync('Swrh_key').openId}});})},})},//多张图片上传uploadimg: function (data) {var that = thiswx.uploadFile({url: data.url,filePath: data.path,name: 'file',header: data.header,formData: {},success: (resp) => {var picUrl = JSON.parse(resp?.data || '{}') //返回的结果,可能不同项目结果不一样if(picUrl.code===0){  //上传图片成功let currUrl = picUrl?.url || ''that.data.currUrl.push(currUrl)that.setData({currUrl:that.data.currUrl,currRequestNum:that.data.currRequestNum+1})}else{that.setData({isFault: this.data.isFault + 1,currRequestNum:that.data.currRequestNum+1})}},fail: (res) => {that.setData({isFault: this.data.isFault + 1,currRequestNum:that.data.currRequestNum+1})},complete: () => {if (that.data.currRequestNum === that.data.currSelectPicNum) {wx.hideLoading();if (that.data.isFault>0) {wx.showModal({title: '温馨提示',content: '检测到有' + that.data.isFault + '张图片上传失败,可能需要您重新上传',showCancel: false,confirmText:'我知道了'})}else{wx.showToast({title: '图片上传成功',mask:true,icon:'success'})}let currArray = that.data.currUrl.concat(that.data.detailPics)console.log(currArray)that.setData({detailPics:currArray})that.triggerEvent('myevent', that.data.detailPics)//结果返回调用的页面}}});},}
})

微信小程序原生上传图片封装相关推荐

  1. 【微信小程序原生】 封装request

    新建一个request类,对wx.request进行简单封装 在request类里做了以下几件事: 在构造函数里创建默认请求的http header,可以在header里配制一些内容,在对应请求方法中 ...

  2. 微信小程序原生开发功能合集一:微信小程序开发介绍

    一.专栏介绍   本专栏主要内容为微信小程序常用功能开发过程的介绍说明,包括开发微信小程序常用组件的封装.常用功能的开发等,提供源代码.开发过程讲解视频.完整的课程等.   组件封装: 下拉选择组件. ...

  3. uniapp开发——微信小程序获取上传图片的拍摄时间(附源码)

    如果是单纯地使用uniapp做app或者h5开发,可以直接在上传的时候 uni.chooseImage 获取到图片的最后修改日期,那么可以使用其作为拍摄日期. 但是,一切的一切都源于微信小程序的接口封 ...

  4. 微信小程序原生开发 记录

    遇到类似 ref 交互的 情况 所需写法 // wxml<wux-calendar id="wux-calendar" /> // js Page({data: {}, ...

  5. 微信小程序上传图片到服务器总是失败_微信小程序怎么上传图片到服务器?

    微信小程序怎么上传图片到服务器?相信很多人都会把小程序图片保存到本地吧,但是把图片上传到服务器就不一定了,下面一起随小编看看微信小程序怎么上传图片到服务器吧. 微信小程序怎么上传图片到服务器? 首先, ...

  6. 微信小程序原生接入腾讯云im(单聊,列表,聊天界面,自定义消息,自动回复)

    微信小程序原生接入腾讯云im(单聊,列表,聊天界面,自定义消息,自动回复) 发送图片语音消息传送→ 文章目录 1.项目需求 2.参考文档 3.效果图 4.初始化 集成SDK 5.登录 6.会话列表 7 ...

  7. 小程序promise封装post请求_微信小程序 es6-promise.js封装请求与处理异步进程

    微信小程序 es6-promise.js封装请求与处理异步进程 下载es6-promise.js置于根目录下的libs文件夹下: 在根目录utils文件夹下新建httpsPromisify.js,即定 ...

  8. 微信小程序canvas2d使用封装与案例使用

    微信小程序canvas2d使用封装与案例使用,看一下这边封装效果 canvas2d文档:https://www.canvasapi.cn/ 下载地址:https://download.csdn.net ...

  9. 微信小程序定位权限封装

    微信小程序定位权限封装 getUserOrSystemPermissions.js //如需动态获取权限,修改res.authSetting['scope.userLocation']与scope: ...

最新文章

  1. 文件名有规则情况读取
  2. 《强化学习周刊》第4期:强化学习应用之智慧交通
  3. 关于python中requests模块导入问题-python引入requests模块报错
  4. 《Windows Server 2012 Hyper-V虚拟化管理实践》一第1章 Hyper-V服务器选型
  5. PCL:关于pcd数据显示乱码
  6. windows最重要的三个dll
  7. mysql sql语句 入门_mysql(3)mysql的sql语句入门
  8. python程序设计的基本步骤_Python程序设计课程教与学(54、72、80学时教学大纲)...
  9. 互联网日报 | 苹果首款自研芯片M1亮相;酷派主动终止与小米专利侵权诉讼;橙心优选日订单破700万...
  10. wpf中UserControl制作
  11. RxSwift学习插曲--Timer补充内容
  12. Html中的map标签
  13. 分布式事务最终一致性mysql_分布式事务最终一致性方案案例
  14. EOS开发“ Hello world !”
  15. type=file的未选择任何文件修改_Excel基础—文件菜单之创建保存
  16. 线性反馈移位寄存器(LFSR)
  17. 华为android phone 驱动,Huawei 手机 驱动程序下载——更新 Huawei 软件
  18. ATX电源的基本描述
  19. Redisson的看门狗机制
  20. uboot启动流程详细分析(基于i.m6ull)

热门文章

  1. ESP8266人体感应项目
  2. iphone手游模拟器_如何将iPhone用作手电筒
  3. 从 LoG 到 DoG 再到 XDoG, FDoG
  4. 学生社团管理系统c语言代码,毕业设计—校园社团活动助手小程序
  5. java计算机毕业设计基于安卓Android/微信小程序的游泳馆管理系统APP
  6. linux刻录windows光盘启动,如何在 Windows / Ubuntu / macOS 上刻录 Ubuntu 启动光盘
  7. il和idl区别_MinoxidilMax出品 Dualgen 15% Minoxil脫髮治療的用藥心得
  8. H5+echarts模拟全国程序员可视化大数据【附完整源码】
  9. 在mysql中查询时间最小的一条记录
  10. 计算机教学中心理反思,多媒体教学反思