小程序上传图上片

五迷三道 提交于 2020-02-20 04:46:32

wx.chooseImage 从本地相册选择图片或使用相机拍照。
调用成功返回一个tempFilePaths数组 图片的本地临时文件路径列表 (本地路径)
和一个tempFiles数组 图片的本地临时文件列表

wx.chooseImage({
  count:3,          //设置一次最多可以选择的图片张数
  sizeType: ['original', 'compressed'], //设置所选的图片的尺寸原图或压缩图
  sourceType: ['album', 'camera'], //设置选择图片的来源(相册、相机)
  success: res => {
    const images = this.data.images.concat(res.tempFilePaths)//concat函数用来联接两个数组 
    // 限制最多只能留下3张照片并吧文件路径存到images
    let thisimages = images.length <= 3 ? images : images.slice(0, 3)
    this.setData({
      images: thisimages
    })

  },
  fail:res=>{
    console.log("调用未成功", res)
  }
})

将选择的图片组成一个Promise数组,准备,并行上传

  const imgarr = []
  let nowdate = util.getNowFormatDate("yyyyMMddhms")
  let i = 0
  console.log("obj2" ,obj2)
  for (let path of this.data.images) {
    let imgname = user_id + "-" + nowdate + "i" + i //生成图片新的文件名
    i = i + 1
    obj2['imgname']=imgname
    imgarr.push(util.uploadimg(path, obj2)) //调用uploadimg函数上传图片返加图片地址
  }
  console.log("imgarr=" + imgarr)

UploadTask wx.uploadFile(Object object)
将本地资源上传到服务器。客户端发起一个 HTTPS POST 请求

function uploadimg(path, obj1) {
  var p = new Promise(function(resolve, reject) {
wx.uploadFile({
  url: rootDocment + "1000jaindex.php",
  filePath: path,   //要上传文件资源的路径 (网络路径)
  name: 'imgFile',  //设置文件对应的 key,开发者在服务端可以通过这个 key 获取文件的二进制内容
  formData: obj1,  //HTTP 请求中其他额外的 form data
  success(res) {
    console.log ('图',res)
    let file_scr = JSON.parse(res.data).file_scr

    //成功上传后返回文件路径
    resolve(file_scr);
  }
})
  return p;
}

PHP服务器端
通过使用 PHP 的全局数组 $_FILES,你可以从客户计算机向远程服务器上传文件。

第一个参数是wx.uploadimg设置的name的值’imgfile’,第二个下标可以是 “name”、“type”、“size”、“tmp_name” 或 “error”。如下所示:

$name=$_FILES["imgfile"]["name"] - 上传文件的名称
$type=$_FILES["imgfile"]["type"] - 上传文件的类型
$size=$_FILES["imgfile"]["size"] - 上传文件的大小,以字节计
$tmp_name=$_FILES["imgfile"]["tmp_name"] - 存储在服务器的文件的临时副本的名称
$error_cod=$_FILES["imgfile"]["error"] - 由文件上传导致的错误代码

这是一种非常简单文件上传方式。基于安全方面的考虑,您应当增加有关允许哪些用户上传文件的限制。
这个时候文件已经传至服务器并生成了临时文件$tmp_name

DIRECTORY_SEPARATOR 是PHP路径分隔符:

接下来就是生成一新完整的完整路径$photo_tmp_file_name

$photo_tmp_path=$web_root.DIRECTORY_SEPARATOR."upload".DIRECTORY_SEPARATOR."temp";  //'1000ja.cn/upload/temp'
$temp_file_name= $imgname.$ext_file_name;                                           //'1475211539-20200219184141i0.jpg'
$photo_tmp_file_name=$photo_tmp_path.DIRECTORY_SEPARATOR.$temp_file_name;           //'1000ja.cn/upload/temp/1475211539-20200219184141i0.jpg'
//$photo_tmp_file_name="upload/temp/".$temp_file_name;
$photo_tmp_file_scr="/upload/temp/".$temp_file_name;                                //'upload/temp/1475211539-20200219184141i0.jpg'

最后move_uploaded_file() 函数把上传的文件移动到新位置成功。
如果成功该函数返回 TRUE,如果失败则返回 FALSE。
注释:该函数仅用于通过 HTTP POST 上传的文件。
注释:如果目标文件已经存在,将会被覆盖。

move_uploaded_file ($tmp_name,$photo_tmp_file_name);
	echo json_encode(array("success"=>true, 'msg'=> "ok","file_name"=>$photo_tmp_file_name,"file_scr"=>$photo_tmp_file_scr,"tmp_name"=>$tmp_name));
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!