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

微信小程序上传图片和文件要有遥不可及的梦想,也要有脚踏实地的本事。———–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) {}
        })
    }

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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Golang小技巧

    Golang小技巧

  • 深度学习之:什么是流形(manifold)?流形空间,流形学习

    深度学习之:什么是流形(manifold)?流形空间,流形学习作者:麋路链接:https://www.zhihu.com/question/24015486/answer/194284643来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。流形学习的观点是认为,我们所能观察到的数据实际上是由一个低维流形映射到高维空间上的。由于数据内部特征的限制,一些高维中的数据会产生维度上的冗余,实际上只需要比较低的维度就能唯一地表示。举个例子,比如说我们在平面上有个圆,如何表示这个圆呢?如果我们把圆放在一个平面直角坐标系中,那一个圆实际.

    2022年10月29日
  • 服务器winsxs文件夹怎么清理工具,win7如何使用WinSxS工具安全删除WinSxS文件夹垃圾…

    服务器winsxs文件夹怎么清理工具,win7如何使用WinSxS工具安全删除WinSxS文件夹垃圾…我们都知道WinSxS是系统文件Windows目录下一个非常重要的文件夹,WinSxS文件夹里边有很多重要的组件,这些文件能够保证Windows7系统正常运行,所以WinSxS文件夹里面的文件是不可以随便删除的。但WinSxS文件夹占用的空间较大,影响win7运行速度,有什么方法可以安全删除一些无用的垃圾?我们可以使用WinSxS工具安全删除WinSxS文件夹垃圾,但是大家在删除文件过程中要小心,…

    2022年10月24日
  • win7 64位wamp2.5无法启动MSVCR110.DLL丢失听语音

    win7 64位wamp2.5无法启动MSVCR110.DLL丢失听语音

  • javascript instanceof_javascript插件

    javascript instanceof_javascript插件连接:http://houliang4285.iteye.com/blog/1585157

    2022年10月14日
  • 002.AnyCast技术浅析

    002.AnyCast技术浅析  一常见通信方式    1.1UniCastAnyCast    UniCast,即单播,指网络中一个节点与另一个节点之间需要建立一个单独的数据通道,从一个节点发出的信息只被一个节点收到,这种传送方式称为单播。即网络中从源向目的地转发单播流量的过程,IP地址与节点(主机)一一对应,单播流量地址唯一。每个节点必须分别对需要访问的节点发送单独的查询,而被访问节点必须向每个访问节点发送所申请的数…

发表回复

您的电子邮箱地址不会被公开。

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