微信小程序上传图片和文件

微信小程序上传图片和文件要有遥不可及的梦想,也要有脚踏实地的本事。———–Grapefruit.BanuitGang(香柚帮)今天讲解一下微信小程序上传图片或者上传文件的步骤:首先第一步我们要先在wxml页面文件中写入一个图标或者按钮,用来触发微信调起手机相册和拍照功能,供你选择图片<imagesrc=”/static/images/addimg.png”bindtap=”chooseImage”></image>然后给这个图标或者按钮写上点击事件chooseImag

大家好,又见面了,我是你们的朋友全栈君。


要有遥不可及的梦想,也要有脚踏实地的本事。———– Grapefruit.Banuit Gang(香柚帮)


今天讲解一下微信小程序上传图片或者上传文件的步骤:

首先第一步我们要先在wxml页面文件中写入一个图标或者按钮,用来触发微信调起手机相册和拍照功能,供你选择图片

<image src="/static/images/addimg.png" bindtap="chooseImage"></image>

然后给这个图标或者按钮写上点击事件chooseImage(事件名称随意定义)

然后还需要写一个盒子,用来存放选择好的文件缩略图,缩略图上写上删除按钮,供删除,并且要实现点击缩略图展示大图的功能,下面是我写的整体内容

<view class="imgbox">
   <!-- 存放上传的图片的盒子 -->
   <block wx:for="{
  
  {images}}" wx:key="this">
      <view class="add">
         <!-- 图片缩略图  -->
         <image src="{
  
  {item}}" mode="aspectFill" data-idx="{
  
  {index}}" bindtap="handleImagePreview"></image>
         <!-- 移除图片的按钮  -->
         <view class="delete" data-idx="{
  
  {index}}" bindtap="removeImage">删除</view>
      </view>
   </block>
   <image src="/static/images/addimg.png" bindtap="chooseImage"></image>
</view>

images: 是用来存放选择图片的数组,js定义

handleImagePreview:查看大图的点击事件

removeImage:删除已选择的图片的点击事件

下面是样式文件,可自由调整

.imgbox{
  width: 100%;
  min-height: 70rpx;
  display: flex;
  align-items: center;
  justify-content: flex-end;
  flex-wrap: wrap;
}
.imgbox image{
  width: 70rpx;
  height: 70rpx;
}
.add{
  display: flex;
  flex-direction: column;
  align-items: center;
  margin-right: 20rpx;
}
.delete{
  font-size: 24rpx;
  color: #E60000;
}

然后是js文件:

Page({
    /**
   * 页面的初始数据
   */
  data: {
    images: [],
  },
  //点击添加按钮选择图片
  chooseImage: function (e) {
    wx.chooseImage({
      sizeType: ['original', 'compressed'], //可选择原图或压缩后的图片
      sourceType: ['album', 'camera'], //可选择性开放访问相册、相机
      success: res => {
        const images = this.data.images.concat(res.tempFilePaths)
        this.setData({
          images: images
        })
      }
    })
  },
  // 删除图片
  removeImage(e) {
    const idx = e.target.dataset.idx;
    this.data.images.splice(idx, 1);
    var del_image = this.data.images;
    this.setData({
      images: del_image
    })
  },
  // 查看大图
  handleImagePreview(e) {
    const idx = e.target.dataset.idx
    const images = this.data.images
    wx.previewImage({
      current: images[idx], //当前预览的图片
      urls: images, //所有要预览的图片
    })
  },
})

到此是已经完成了图片选择,删除,预览的功能

最后是上传:

需要注意的是,上传图片的时候只能单张上传,因此当我们选择了多张图片之后,需要分开一张一张的上传,因此需要写一个for循环。

点击上传按钮进行操作:

    var that = this;
    let images = this.data.images
    let img = []
    if (images.length > 0) {
      for (var i = 0; i < images.length; i++) {
        wx.getImageInfo({
          src: images[i],
          success(res) {
            wx.uploadFile({
              url: api.Cg_TousuUpload + '?session_id=' + wx.getStorageSync('session_id'), //上传图片接口地址
              filePath: res.path,
              name: 'wxfiles',
              formData: null,
              timeout: 60000,
              formData: { 
                //这里面可以放一些后端要的其他参数
              },
              success: function (res) {
                if (JSON.parse(res.data).code == 'Y') {
                  //上传成功之后,后端会返回你图片的线上地址,名称和一个id
                  if (images.length == img.length) {
                    //相等说明已经上传完毕
                  }
                }
              },
              fail: function (error) {}
            })
          }
        })
      }
    }

这个是上传图片的步骤,上传附件跟上传图片大致类似,下面是上传附件的步骤

  // 文件上传
  chooseFile() {
    var that = this
    wx.chooseMessageFile({
      count: 1,
      type: 'file',
      success(res) {
        var file = 'voucherData.matterapply_file'
        const tempFilePaths = res.tempFiles
        that.setData({
          files: tempFilePaths
        })
      }
    })
  },
  // 删除文件
  removefile() {
    this.setData({
      files: []
    })
  },

我这里是只允许选择一张附件,如果要选择多个附件,参照图片功能即可,

还有就是wx.chooseMessageFile这个方法只允许选择微信里的文件,如果想上传手机里的文件,需要用微信发一下就能选到了

    var that = this;
    let files = that.data.files
    if (files.length > 0) {
        wx.uploadFile({
          url: api.Cg_TousuUpload + '?session_id=' + wx.getStorageSync('session_id'), //上传附件接口地址
          filePath: res.path,
          name: 'wxfiles',
          formData: null,
          timeout: 60000,
          formData: { 
             //这里面可以放一些后端要的其他参数
          },
          success: function (res) {
            if (JSON.parse(res.data).code == 'Y') {
              //上传成功之后,后端会返回你附件的线上地址,名称和一个id
            }
          },
          fail: function (error) {}
        })
    }

好了,就是这些,有问题咨询,希望能帮助到一些人吧!!!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/148235.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Hook(钩子技术)基本知识讲解,原理

    一、什么是HOOK(钩子)      对于Windows系统,它是建立在事件驱动机制上的,说白了就是整个系统都是通过消息传递实现的。hook(钩子)是一种特殊的消息处理机制,它可以监视系统或者进程中的各种事件消息,截获发往目标窗口的消息并进行处理。所以说,我们可以在系统中自定义钩子,用来监视系统中特定事件的发生,完成特定功能,如屏幕取词,监视日志,截获键盘、鼠标输入等等。     钩子…

    2022年4月3日
    40
  • 5G网络切片综述 — 1

    5G网络切片综述 — 1简介随着5G时代的来临,21年的SA在国内的全范围商用,现阶段人们对于5G的必要性认识还不足。主要是目前人们用的5G主要集中在eMBB(enhancedMobileBroadband)即增强型移动带宽的阶段,而大数据业务如在线直播、高清视频等在4G上都得到了很好的支持,所以带宽的继续增大对于用户体验的边际效应递减。5G所带来的真正改善并不仅仅是在于大带宽,而在于5G提供了在同一张物理5G网络的情况下,同时能够提供eMBB,URLLC(Ultra-ReliableLow-LatencyCommun

    2022年10月2日
    2
  • 面向对象相关模块

    hashlib模块hashlib提供了常见的摘要算法,如md5和sha1等等。那么什么是摘要算法呢?摘要算法又称为哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通

    2022年3月29日
    44
  • 树莓派更换pip源

    树莓派更换pip源注:pip更换为国内源,可以大大的提高安装成功率和速度。不管你用的是pip3还是pip,方法都是一样的,如下:例:这里举例换豆瓣源(个人认为它比较好用)先创建这个文件vim~/.pip/pip.conf在里面添加如下内容:[global]timeout=6000index-url=http://pypi.douban.com/simple/[install]use-mi…

    2022年6月4日
    116
  • RegisterStartupScript和RegisterClientScriptBlock

    RegisterStartupScript和RegisterClientScriptBlockPage.Response.Write(“varresponse;”);    Page.RegisterStartupScript(“RegisterStartupScript”,”varRegisterStartupScript;”);    Page.RegisterClientScriptBlock(“RegisterClientScriptBlock”,”varRe

    2022年7月20日
    15
  • 查看oracle端口号「建议收藏」

    查看oracle端口号「建议收藏」我的oracle安装路径:D:/Study/Oracle打开其中的tnsnames.ora此文件中port=“端口号”端口号一般为1521

    2022年4月18日
    240

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号