微信小程序选择多张图片连同表单中其他信息一起上传并保存到MySQL数据库

时间:2025-03-17 08:12:34

多读多写多记录,多学多练多思考。----------- Banana • Banuit Gang(BUG香柚帮)


  最近在做小程序的多图片上传+连同表单信息和图片服务器端地址一起保存到数据库中这项功能,但是发现小程序只支持一张一张的图片上传,即使用递归或者循环都必须调用多次上传图片的方法,如果上传图片时连同表单一块提交持久化到数据库,那么就会保存多条记录,想了又想,最终思路就是把上传图片和提交表单分为两个方法,首先上传多张图片,在PHP后端单张上传成功后,返回给小程序一个服务器图片地址,然后小程序把地址保存到一个全局数组里边,当选择的图片和上传成功的图片相等时,再把数据转化为json,然后连同表单其他信息再调用上传信息的方法,持久化到数据库中就可以了。这只是我的思路,不知道还有什么好的方法可以解决这个问题呢。

我单独整理了一个小栗子,大家可以下载学习一下,例子中包括填写表单,上传信息,展示信息

GitHub地址:/kun19911227/

upload_info.js

//点击添加按钮选择多张图片
chooseImage: function(e) {
   ({
      sizeType: ['original', 'compressed'], //可选择原图或压缩后的图片
      sourceType: ['album', 'camera'], //可选择性开放访问相册、相机
      success: res => {
        if ( <= 1) {
          const images = ()
          // 限制最多只能留下2张照片
          ({
            images: images
          })
        } else {
          ({
            title: '最多只能选择两张照片',
            icon: 'none',
            duration: 2000,
            mask: true
          })
        }
      }
   })
}
//上传图片和信息
upload_info: function() {
    var images_list = []; //设置了一个空数组进行储存服务器端图片路径
        
    for (var i = 0; i < ; i++) {
        var that = this;
        ({
            url: '/?g=api&m=user&a=upload_img', //上传图片接口地址
            filePath: [i],
            name: 'photo',
            formData: null,
            success: function(res) {
                // json转换数组
                var jsonObj = ()
                images_list.push();//把每次返回的地址放入数组
                if ( == images_list.length) {//当选中的图片和上传成功图片相等时,调用上传信息方法
                    var photo = (images_list)//将数组转化为json
                    ({
                        url: '/?g=api&m=fastcar&a=upload_info',
                        method : 'POST',
                        data: {
                              name: ,
                              sex:  == '男' ? 1 : 2,
                              age: ,
                              phone: ,
                              id_number: ,
                              is_member:1,
                              condition: ,
                              photo: photo,
                              expert_status: arr_str,
                              expert_units: ,
                              expert_name: .expert_name,
                              cons_start_date: ,
                              cons_end_date: .date2,
                              require_status: 
                        },
                        header: {
                            "Content-Type": "application/x-www-form-urlencoded" 
                        },
                        success(res) {

                        }  
                    }) 
                    //(photo);
                }
            },
            fail: function(error) {
                (error);
            }
        })
    }
}

 

    /**
	 * 上传信息api
	 */
	public function upload_info() {
		$data = array();
		$post = array();
		//接收参数
		$post['name'] = I('');
		$post['sex'] = I('');
		$post['age'] = I('');
		$post['phone'] = I('');
		$post['id_number'] = I('post.id_number');
		$post['is_member'] = I('post.is_member');
		$post['condition'] = I('');
		$post['phpto'] = I('');
		$post['expert_status'] = I('post.expert_status');
		$post['expert_units'] = I('post.expert_units');//非必填
		$post['expert_name'] = I('post.expert_name');//非必填
		$post['cons_start_date'] = I('post.cons_start_date');
		$post['cons_end_date'] = I('post.cons_end_date');
		$post['require_status'] = I('post.require_status');
		$post['create_time'] = time();

		if ( (empty($post['user_id']) && isset($post['user_id'])) ||
			(empty($post['name']) && isset($post['name'])) ||
			(empty($post['sex']) && isset($post['sex'])) ||
			(empty($post['age']) && isset($post['age'])) ||
			(empty($post['phone']) && isset($post['phone'])) ||
			(empty($post['id_number']) && isset($post['id_number'])) ||
			(empty($post['is_member']) && isset($post['is_member'])) ||
			(empty($post['condition']) && isset($post['condition'])) ||
			(empty($post['rop']) && isset($post['rop'])) ||
			(empty($post['expert_status']) && isset($post['expert_status'])) ||
			(empty($post['cons_start_date']) && isset($post['cons_start_date'])) ||
			(empty($post['cons_end_date']) && isset($post['cons_end_date'])) ||
			(empty($post['require_status']) && isset($post['require_status'])) ) {
			$data['code'] = 0;
			$data['msg'] = "有必填参数为空";
		} else {

			$result = D('User')->add($post);

			if ($result !== false) {
				$data['code'] = 1;
				$data['msg'] = "提交成功";
			} else {
				$data['code'] = 2;
				$data['msg'] = "提交失败";
			}


		}
		return $this->ajaxReturn($data);
	}

	/**
	 * 上传图片
	 */
	public function upload_img() {
		$data = array();
		$uploadConfig = array(
			'FILE_UPLOAD_TYPE' => sp_is_sae() ? 'Sae' : 'Local',
			'rootPath' => './'.C( 'UPLOADPATH' ),
			'savePath' => './minipro/',
			'saveName' => array( 'uniqid', '' ),
			'exts' => array( 'jpg', 'jpeg', 'png','gif' ),
			'autoSub' => false
		);
		$upload = new \Think\Upload( $uploadConfig );
		$info = $upload->upload();
		if($info) {
			$save_name = $info['photo']['savepath'].$info['photo']['savename'];
			$save_name = substr($save_name,1);
			$url = "http://".$_SERVER['HTTP_HOST']."/data/upload".$save_name;
			$data['url'] = $url;
			return $this->ajaxReturn($data);
		}
	}