微信小程序实现一张或多张图片上传(云开发)


Posted in Javascript onSeptember 25, 2019

一、简介:

这篇文章向大家展示的是把图片上传到云数据库中,这是我做商城项目时研究的。大家都知道,云开发是没有后端开发的,所有图片我们要放到云数据库中。

二、素材图:

微信小程序实现一张或多张图片上传(云开发)

三、效果图:

微信小程序实现一张或多张图片上传(云开发)

微信小程序实现一张或多张图片上传(云开发)

四、代码:

wxml:

<!--miniprogram/pages/fb/fb.wxml-->
<view class='pages'>
 <view class='top'><text class='top_name'>商品图片:</text></view>
 <!-- 图片 -->
 <view class="images_box">
  <block wx:key="imgbox" wx:for="{{imgbox}}">
   <view class='img-box'>
    <image class='img' src='{{item}}'></image>
    <view class='img-delect' data-deindex='{{index}}' bindtap='imgDelete1'>
     <image class='img' src='../../images/delect.png'></image>  
    </view>
   </view>
  </block>
  <view class='img-box' bindtap='addPic1' wx:if="{{imgbox.length<9}}">
   <image class='img' src='../../images/add_image.png'></image>  
  </view>
 </view>
 <button bindtap='fb'>上传图片</button>
</view>

wxss:

/* miniprogram/pages/fb/fb.wxss */
page{
 background-color: rgba(200, 198, 201, 0.527);
}
.pages{
 width: 98%;
 margin: auto;
 overflow: hidden;
}
.top{
 width: 100%;
 overflow: hidden;
 margin: auto;
 font-size: 50rpx;
 background-color: white;
 border-left: 8rpx solid rgb(9, 245, 60);
 border-bottom: 1rpx solid rgba(117, 116, 116, 0.527);
}
.top_name{
 margin-left: 20rpx;
}
/* 图片 */
.images_box{
 width: 100%;
 display: flex;
 flex-direction: row;
 flex-wrap: wrap;
 justify-content: flex-start;
 background-color: white;
}
.img-box{
 border: 5rpx;
 border-style: solid;
 border-color: rgba(0, 0, 0, 0.452);
 width: 200rpx;
 height: 200rpx;
 margin-left: 35rpx;
 margin-top: 20rpx;
 margin-bottom: 20rpx;
 position: relative;
}
/* 删除图片 */
.img-delect{
 width:50rpx;
 height:50rpx;
 border-radius:50%;
 position:absolute;
 right:-20rpx;
 top:-20rpx;
}
.img{
 width: 100%;
 height: 100%;
}
.jiage{
 height: 60rpx;
 width: 90%;
 margin-left: 5%;
 margin-right: 5%;
 background-color: white;
 display: flex;
 justify-content: flex-start;
}
.rmb{
 width: 280rpx;
 border: 2rpx solid rgb(199, 197, 197);
}
button{
 margin-top: 20rpx;
 background-color: green;
}
.radio-group{
 display: flex;
}

js:

// pages/fb/fb.js
const app = getApp()
const db = wx.cloud.database();//初始化数据库
Page({
 /**
  * 页面的初始数据
  */
 data: {
  imgbox: [],//选择图片
  fileIDs: [],//上传云存储后的返回值
 },

 // 删除照片 &&
 imgDelete1: function (e) {
  let that = this;
  let index = e.currentTarget.dataset.deindex;
  let imgbox = this.data.imgbox;
  imgbox.splice(index, 1)
  that.setData({
   imgbox: imgbox
  });
 },
 // 选择图片 &&&
 addPic1: function (e) {
  var imgbox = this.data.imgbox;
  console.log(imgbox)
  var that = this;
  var n = 5;
  if (5 > imgbox.length > 0) {
   n = 5 - imgbox.length;
  } else if (imgbox.length == 5) {
   n = 1;
  }
  wx.chooseImage({
   count: n, // 默认9,设置图片张数
   sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
   sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有
   success: function (res) {
    // console.log(res.tempFilePaths)
    // 返回选定照片的本地文件路径列表,tempFilePath可以作为img标签的src属性显示图片
    var tempFilePaths = res.tempFilePaths

    if (imgbox.length == 0) {
     imgbox = tempFilePaths
    } else if (5 > imgbox.length) {
     imgbox = imgbox.concat(tempFilePaths);
    }
    that.setData({
     imgbox: imgbox
    });
   }
  })
 },

 //图片
 imgbox: function (e) {
  this.setData({
   imgbox: e.detail.value
  })
 },


 //发布按钮
 fb: function (e) {
  if (!this.data.imgbox.length) {
   wx.showToast({
    icon: 'none',
    title: '图片类容为空'
   });
  } else {
    //上传图片到云存储
    wx.showLoading({
     title: '上传中',
    })
    let promiseArr = [];
    for (let i = 0; i < this.data.imgbox.length; i++) {
     promiseArr.push(new Promise((reslove, reject) => {
      let item = this.data.imgbox[i];
      let suffix = /\.\w+$/.exec(item)[0];//正则表达式返回文件的扩展名
      wx.cloud.uploadFile({
       cloudPath: new Date().getTime() + suffix, // 上传至云端的路径
       filePath: item, // 小程序临时文件路径
       success: res => {
        this.setData({
         fileIDs: this.data.fileIDs.concat(res.fileID)
        });
        console.log(res.fileID)//输出上传后图片的返回地址
        reslove();
        wx.hideLoading();
        wx.showToast({
         title: "上传成功",
        })
       },
       fail: res=>{
        wx.hideLoading();
        wx.showToast({
         title: "上传失败",
        })
       }

      })
     }));
    }
    Promise.all(promiseArr).then(res => {//等数组都做完后做then方法
     console.log("图片上传完成后再执行")
     this.setData({
      imgbox:[]
     })
    })

   }
 },

})

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

Javascript 相关文章推荐
关于jQuery $.isNumeric vs. $.isNaN vs. isNaN
Apr 15 Javascript
jquery 单引号和双引号的区别及使用注意
Jul 31 Javascript
JS实现网页上随滚动条滚动的层效果代码
Nov 04 Javascript
WEB前端开发都应知道的jquery小技巧及jquery三个简写
Nov 15 Javascript
javascript实现省市区三级联动下拉框菜单
Nov 17 Javascript
AngularJS自动表单验证
Feb 01 Javascript
Bootstrap入门书籍之(五)导航条、分页导航
Feb 17 Javascript
Angularjs实现多个页面共享数据的方式
Mar 29 Javascript
微信小程序 Windows2008 R2服务器配置TLS1.2方法
Dec 05 Javascript
jquery Banner轮播选项卡
Dec 26 Javascript
vue2.0实战之使用vue-cli搭建项目(2)
Mar 27 Javascript
JS实现多物体运动的方法详解
Jan 23 Javascript
Layer组件多个iframe弹出层打开与关闭及参数传递的方法
Sep 25 #Javascript
layer 关闭指定弹出层的例子
Sep 25 #Javascript
layer关闭弹出窗口触发表单提交问题的处理方法
Sep 25 #Javascript
layer弹窗在键盘按回车将反复刷新的实现方法
Sep 25 #Javascript
Vue 实现一个命令式弹窗组件功能
Sep 25 #Javascript
layui prompt 设置允许空白提交的方法
Sep 24 #Javascript
微信小程序制作扭蛋机代码实例
Sep 24 #Javascript
You might like
php 结果集的分页实现代码
2009/03/10 PHP
php 解决旧系统 查出所有数据分页的类
2012/08/27 PHP
php中将html中的br换行符转换为文本输入中的换行符
2013/03/26 PHP
PHP查询快递信息的方法
2015/03/07 PHP
PHP简单获取视频预览图的方法
2015/03/12 PHP
PHP中余数、取余的妙用
2015/06/29 PHP
Yii2学习笔记之汉化yii设置表单的描述(属性标签attributeLabels)
2017/02/07 PHP
OAuth认证协议中的HMACSHA1加密算法(实例)
2017/10/25 PHP
PHP设计模式之适配器模式定义与用法详解
2018/04/03 PHP
phpstorm 配置xdebug的示例代码
2019/03/31 PHP
javascript 流畅动画实现原理
2009/09/08 Javascript
javascript window.opener的用法分析
2010/04/07 Javascript
setInterval计时器不准的问题解决方法
2014/05/08 Javascript
Javascript中的delete操作符详细介绍
2014/06/06 Javascript
jQuery实现淡入淡出二级下拉导航菜单的方法
2015/08/28 Javascript
聊一聊JS中this的指向问题
2016/06/17 Javascript
微信小程序之数据缓存的实例详解
2017/09/29 Javascript
你应该了解的JavaScript Array.map()五种用途小结
2018/11/14 Javascript
微信小程序实现基于三元运算验证手机号/姓名功能示例
2019/01/19 Javascript
微信打开网址添加在浏览器中打开提示的办法
2019/05/20 Javascript
js前端如何写一个精确的倒计时代码
2019/10/25 Javascript
javascript实现多边形碰撞检测
2020/10/24 Javascript
python实现将文本转换成语音的方法
2015/05/28 Python
windows系统下Python环境搭建教程
2017/03/28 Python
Python计时相关操作详解【time,datetime】
2017/05/26 Python
Python flask框架post接口调用示例
2019/07/03 Python
解决Python3.8用pip安装turtle-0.0.2出现错误问题
2020/02/11 Python
Python基于requests库爬取网站信息
2020/03/02 Python
浅谈在django中使用filter()(即对QuerySet操作)时踩的坑
2020/03/31 Python
Python字符串三种格式化输出
2020/09/17 Python
python 邮件检测工具mmpi的使用
2021/01/04 Python
python如何发送带有附件、正文为HTML的邮件
2021/02/27 Python
本科生职业生涯规划书范文
2014/01/21 职场文书
商业企业管理专业求职信
2014/07/10 职场文书
班主任班级管理心得体会
2016/01/07 职场文书
Vue Element plus使用方法梳理
2022/12/24 Vue.js