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


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 相关文章推荐
JAVASCRIPT对象及属性
Feb 13 Javascript
jquery validate.js表单验证的基本用法入门
May 13 Javascript
Ext中下拉列表ComboBox组件store数据格式用法介绍
Jul 15 Javascript
js给selected添加options的方法
May 06 Javascript
简介JavaScript中strike()方法的使用
Jun 08 Javascript
js实现二级菜单渐隐显示
Nov 03 Javascript
使用CDN和AJAX加速WordPress中jQuery的加载
Dec 05 Javascript
js利用for in循环获取 一个对象的所有属性以及值的实例
Mar 30 Javascript
探索webpack模块及webpack3新特性
Sep 18 Javascript
如何使node也支持从url加载一个module详解
Jun 05 Javascript
浅谈Vue组件及组件的注册方法
Aug 24 Javascript
浅谈vue方法内的方法使用this的问题
Sep 15 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
让CodeIgniter的ellipsize()支持中文截断的方法
2014/06/12 PHP
php实现的网络相册图片防盗链完美破解方法
2015/07/01 PHP
php获取图片信息的方法详解
2015/12/10 PHP
PHP attributes()函数讲解
2019/02/03 PHP
jquery 图片截取工具jquery.imagecropper.js
2010/04/09 Javascript
ModelDialog JavaScript模态对话框类代码
2011/04/17 Javascript
jQuery ajax 路由和过滤器使用说明
2011/08/02 Javascript
jQuery之自动完成组件的深入解析
2013/06/19 Javascript
JSONP之我见
2015/03/24 Javascript
JS中正则表达式只有3种匹配模式(没有单行模式)详解
2016/07/28 Javascript
JavaScript 链式结构序列化详解
2016/09/30 Javascript
jQuery特殊符号转义的实现
2016/11/30 Javascript
Node.js和Express简单入门介绍
2017/03/24 Javascript
推荐三款不错的图片压缩上传插件(webuploader、localResizeIMG4、LUploader)
2017/04/21 Javascript
bootstrap select2插件用ajax来获取和显示数据的实例
2018/08/09 Javascript
Easyui 去除jquery-easui tab页div自带滚动条的方法
2019/05/10 jQuery
Vue-cli3多页面配置详解
2020/03/22 Javascript
JavaScript进阶(二)词法作用域与作用域链实例分析
2020/05/09 Javascript
[13:56]DAC2018 4.5SOLO赛决赛 MidOne vs Paparazi第一场
2018/04/06 DOTA
[02:16]完美世界DOTA2联赛PWL S3 集锦第三期
2020/12/21 DOTA
Python 分析Nginx访问日志并保存到MySQL数据库实例
2014/03/13 Python
python用模块zlib压缩与解压字符串和文件的方法
2016/12/16 Python
Python使用openpyxl读写excel文件的方法
2017/06/30 Python
python3对接mysql数据库实例详解
2019/04/30 Python
python3调用windows dos命令的例子
2019/08/14 Python
推荐WEB开发者最佳HTML5和CSS3代码生成器
2015/11/24 HTML / CSS
Spartoo比利时:欧洲时尚购物网站
2017/12/06 全球购物
领先的荷兰线上超市:荷兰之家Holland at Home(支持中文)
2021/01/21 全球购物
韩国商务邀请函
2014/01/14 职场文书
会计岗位职责范本
2014/03/07 职场文书
五星级酒店前台接待岗位职责
2015/04/02 职场文书
记者节感言
2015/08/03 职场文书
安全生产会议制度
2015/08/06 职场文书
2021-4-3课程——SQL Server查询【2】
2021/04/05 SQL Server
简单聊聊Vue中的计算属性和属性侦听
2021/10/05 Vue.js
详解Nginx 被动检查服务器的存活状态
2021/10/16 Servers