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

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


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


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

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

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

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

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

  1. <view hljs-string">"imgbox">
  2. <!-- 存放上传的图片的盒子 -->
  3. <block wx:for="{{images}}" wx:key="this">
  4. <view hljs-string">"add">
  5. <!-- 图片缩略图 -->
  6. <image src="{{item}}" mode="aspectFill" data-idx="{{index}}" bindtap="handleImagePreview"></image>
  7. <!-- 移除图片的按钮 -->
  8. <view hljs-string">"delete" data-idx="{{index}}" bindtap="removeImage">删除</view>
  9. </view>
  10. </block>
  11. <image src="/static/images/addimg.png" bindtap="chooseImage"></image>
  12. </view>

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

handleImagePreview:查看大图的点击事件

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

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

  1. .imgbox{
  2. >
    min->
    display: flex;
  3. align-items: center;
  4. justify-content: flex-end;
  5. flex-wrap: wrap;
  6. }
  7. .imgbox image{
  8. >
    >
    }
  9. .add{
  10. display: flex;
  11. flex-direction: column;
  12. align-items: center;
  13. margin-right: 20rpx;
  14. }
  15. .delete{
  16. font-size: 24rpx;
  17. color: #E60000;
  18. }

然后是js文件:

  1. Page({
  2. data: {
  3. images: [],
  4. },
  5. //点击添加按钮选择图片
  6. chooseImage: function (e) {
  7. wx.chooseImage({
  8. sizeType: ['original', 'compressed'], //可选择原图或压缩后的图片
  9. sourceType: ['album', 'camera'], //可选择性开放访问相册、相机
  10. success: res => {
  11. const images = this.data.images.concat(res.tempFilePaths)
  12. this.setData({
  13. images: images
  14. })
  15. }
  16. })
  17. },
  18. // 删除图片
  19. removeImage(e) {
  20. const idx = e.target.dataset.idx;
  21. this.data.images.splice(idx, 1);
  22. var del_image = this.data.images;
  23. this.setData({
  24. images: del_image
  25. })
  26. },
  27. // 查看大图
  28. handleImagePreview(e) {
  29. const idx = e.target.dataset.idx
  30. const images = this.data.images
  31. wx.previewImage({
  32. current: images[idx], //当前预览的图片
  33. urls: images, //所有要预览的图片
  34. })
  35. },
  36. })

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

最后是上传:

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

点击上传按钮进行操作:

  1. var that = this;
  2. let images = this.data.images
  3. let img = []
  4. if (images.length > 0) {
  5. for (var i = 0; i < images.length; i++) {
  6. wx.getImageInfo({
  7. src: images[i],
  8. success(res) {
  9. wx.uploadFile({
  10. url: api.Cg_TousuUpload + '?session_id=' + wx.getStorageSync('session_id'), //上传图片接口地址
  11. filePath: res.path,
  12. name: 'wxfiles',
  13. formData: null,
  14. timeout: 60000,
  15. formData: {
  16. //这里面可以放一些后端要的其他参数
  17. },
  18. success: function (res) {
  19. if (JSON.parse(res.data).code == 'Y') {
  20. //上传成功之后,后端会返回你图片的线上地址,名称和一个id
  21. if (images.length == img.length) {
  22. //相等说明已经上传完毕
  23. }
  24. }
  25. },
  26. fail: function (error) {}
  27. })
  28. }
  29. })
  30. }
  31. }

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

  1. // 文件上传
  2. chooseFile() {
  3. var that = this
  4. wx.chooseMessageFile({
  5. count: 1,
  6. type: 'file',
  7. success(res) {
  8. var file = 'voucherData.matterapply_file'
  9. const tempFilePaths = res.tempFiles
  10. that.setData({
  11. files: tempFilePaths
  12. })
  13. }
  14. })
  15. },
  16. // 删除文件
  17. 特别声明:本站部分内容收集于互联网是出于更直观传递信息的目的。该内容版权归原作者所有,并不代表本站赞同其观点和对其真实性负责。如该内容涉及任何第三方合法权利,请及时与824310991@qq.com联系,我们会及时反馈并处理完毕。