菲律宾j9集团|Home

135-2716-3909
网站建设资讯详细

微信小程□□□序选择多□□□□张图片上◉传到服务□□□器显示上□□□□传进度(PHP)代码全解

发表日期:2026-05-28 16:47:53   作者来源:菲律宾j9集团   浏览:15839   标签:微信小程序    图片上传    

菲律宾j9集团☆专注于网□□□□站建设和★微信小程□□□□序定制开□□□□发,今天给大◎家分享一□□□下微信小□□□□程序选择◥多张图片□□上传到服♦务器的实□□□现及上传□□□进度显示□□□的代码全□□□解与分享。

微信小程序多图上传示例

这里主要□□使用了两□□个微信的□□接口

一、wx.chooseImage(OBJECT) 从本地相□□□□册选择图□□□□片或使用□□相机拍照;
二、wx.uploadFile(OBJECT) 将本地资□□源上传到♦开发者服□□□□务器,返回一个 uploadTask 对象,通过 uploadTask,可监听上▲传进度变□□□□化事件,以及取消□□上传任务。

WXML代码如下

<view class="picture_list">
    <view wx:for="{{upload_picture_list}}" class="picture_item">
         <image wx:if="{{item.upload_percent < 100}}" src="{{item.path}}"   mode="aspectFill"></image>
         <image wx:if="{{item.upload_percent == 100}}" src="{{item.path_server}}"   mode="aspectFill"></image>
         <view class="upload_progress" wx:if="{{item.upload_percent < 100}}">
              {{item.upload_percent}}%
         </view>
    </view>
    <view  class="picture_item">
    <image src="/images/btn_uploadpic.png" bindtap="uploadpic"  mode="aspectFill"></image>
    </view>
</view>

WXSS样式代码□□如下

.picture_list{
  padding:20px;
  display:flex;
  flex-direction: row;
  flex-wrap:wrap;
  justify-content:flex-start;
  align-items:flex-start;
  align-content:flex-start;
}
.picture_item{margin:10px;position:relative;width:160rpx;height:160rpx;}
.upload_progress{position:absolute;top:0;left:0;opacity:0.7;background-color:#000;color:#fff;width:160rpx;height:160rpx;text-align:center;line-height:160rpx;font-size:12px;}
.picture_item image{width:160rpx;height:160rpx;}

下面是关□□□□键的JS代码

 
/**
   * 页面的初□□□□始数据
   */
  data: {
    upload_picture_list:[]
  },
  uploadpic: function (e) {
    var that = this
    var upload_picture_list = that.data.upload_picture_list
    wx.chooseImage({
      count: 8, // 默认9,这里显示□□□一次选择□□□□相册的图□□□□片数量
      sizeType: ['original', 'compressed'], // 可以指定□□□是原图还□□是压缩图,默认二者□□□□都有
      sourceType: ['album', 'camera'], // 可以指定□□□来源是相□□□册还是相※机,默认二者◤都有
      success: function (res) {
        // 返回选定□□□□照片的本□□□地文件路□□□□径列表,tempFilePath可以作为img标签的src属性显示□□□图片
        var tempFiles = res.tempFiles
        //循环把图□□片加入上□□传列表
        for (var i in tempFiles) {
          tempFiles[i]['upload_percent'] = 0
          tempFiles[i]['path_server'] = ''
          upload_picture_list.push(tempFiles[i])
        }
        that.setData({
          upload_picture_list: upload_picture_list,
        }) 
        //循环把图□□□□片上传到□□□服务器 并显示进□□□度
        for (var j in upload_picture_list) {
          if (upload_picture_list[j]['upload_percent'] == 0) {
             upload_file_server(that,upload_picture_list,j)
          }
        }
      }
    })
  },


function upload_file_server(that,upload_picture_list,j) {
  console.log("开始上传"+j+"图片到服□□□□务器:")
  console.log(upload_picture_list[j])
  var upload_task = wx.uploadFile({
    url: 'https://www.tyjwx.com/', //需要用HTTPS,同时在微信公众平台后台添加服务器地址
    filePath: upload_picture_list[j]['path'],//上传的文件本地地址
    name: 'file',
    formData: {'path': 'wxchat'},//附近数据,这里为路□□□径
    success: function (res) {
      var data = JSON.parse(res.data) //字符串转◉化为JSON
      if (data.Success == true) {
        var filename = "https://www.tyjwx.com/" + data.SaveName
        upload_picture_list[j]['path_server'] = filename
      }
      that.setData({
        upload_picture_list: upload_picture_list
      }) 
      console.log("图片上传" + j +"到服务器□□□□完成:")
      console.log(upload_picture_list[j])
    }
  })
  upload_task.onProgressUpdate((res) => {
    // console.log('上传进度', res.progress)
    // console.log('已经上传□□□的数据长□□□度', res.totalBytesSent)
    // console.log('预期需要◤上传的数□□□□据总长度', res.totalBytesExpectedToSend)
    upload_picture_list[j]['upload_percent'] = res.progress
    console.log('第' + j + '个图片上□□□传进度:' + upload_picture_list[j]['upload_percent'])
    console.log(upload_picture_list)
    that.setData({
      upload_picture_list: upload_picture_list
    }) 
    
  })
}

PHP代码(服务器接□□□受文件,以THINKPHP为例)
//$path为上传路径
public function upload($path){
if(IS_POST){
  $upload = new \Think\Upload(); // 实例化上◥传类
  $upload->exts = array('jpg', 'bmp', 'gif', 'png', 'jpeg'); // 设置附件□□□□上传类型
  $upload->saveName = array('randomname', '6');
  $upload->maxSize = 2024000;//图片上传
  $upload->rootPath = 'Public'; // 设置附件□□□□上传目录
  $upload->savePath = '/upload/' . $path . '/';
  $upload->autoSub = false;
  $info = $upload->upload();
  if (!$info) {// 上传错误□□□提示错误□□□□信息
     $data['Message'] = $upload->getError();
     $data['Success'] = false;
  } else {// 上传成功
     foreach ($info as $file) {
         $filepath = "/" . $upload->rootPath . $file['savepath'] . $file['savename'];
         $data['Success'] = true;
         $data['SaveName'] = $filepath;
     }
  }
  $this->ajaxReturn($data);
}

这里备注□□□下,就是最大◢并发送是10个文件一◤起上传,同时默认□□□超时时间□□□和最大超☆丨时时间□□□□都□□是 60s,上传图片□□□进度显示□□□□需要基础□□□库 1.4.0 开始才支□□□持,如果版本◤丨太低需□□要□□做兼容处□□□理或者不□□□显示进度。

到此就算□□大功高成,微信小程□□□□序多图上♦传功能基□□本就算完□□成,此代码示□□□例菲律宾j9集团已经测□□□试通过,如有问题□□□欢迎反馈◆我们的客□□服QQ

此文章为★菲律宾j9集团□□原创,转载请注□□□□明出处。

如没特殊注明,文章均为菲律宾j9集团原创,转载请注明来自https://www.tyjwx.com/news/3830.html