在做小程序 上传图片到B服务器。但是B服务器上协议是http的。所以有个中转服务器A
小程序上传图片->A服务器->B服务器
网上找的答案太水了,试了都不成功了。也是很无语了。
小程序里上传图片chooseImage
wx.uploadFile({
url: app.globalData.baseUrl + 'uploadUseravatar', //A服务器接口
filePath: tempFilePaths[0],//图片路径
name: 'file',
formData: {
uid: uid,//其他参数
openid: openid,//其他参数
link: link //其他参数
},
header: {
"Content-Type": "multipart/form-data"
},
A服务器接收图片:
$request = new Request(); $file = $request->file('file');
$info = $file->move(ROOT_PATH . 'uploads/avatar',"file.png");//将图片保存在服务器根下/uoloads/avatar文件夹下
$filename=$info->getSaveName();//文件名
$path= 'https:/AA.cn/uploads/avatar/'.$filename;//图片在A服务器上的访问路径
$geturl="http://BB.CN/rest?method=base.user.saveAvatar";//B服务器上接收图片接口
$post_data = array( "uid" => $uid, "upload" => $path,//文件路径 "filename"=>$filename,文件名称 ); header("Access-Control-Allow-Origin: *"); $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $geturl); curl_setopt($curl, CURLOPT_HEADER, 0);//不抓取头部信息。只返回数据 curl_setopt($curl, CURLOPT_TIMEOUT, 20);//超时设置 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);//1表示不返回bool值 curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data); $data = curl_exec($curl); if (curl_errno($curl)) { return curl_error($curl); } curl_close($curl);
B服务器接收图片
$filepath=input('upload','');//图片绝对路径 $filename=input('filename','');//图片名称 $model = model('edu/Student'); $savepath = "./";B服务器上保存路径 $mao=file_get_contents($filepath); $res=file_put_contents($savepath,$mao);
重要解决这个需求 了。开心