我用的是tp5,需求是前端把file给到后端,后端再去把file提交给第三方接口去做上传。
private function curlUploadFile($url, $data,$headers = array())
{
$curl = curl_init();
if (class_exists('\CURLFile')) {
curl_setopt($curl, CURLOPT_SAFE_UPLOAD, true);
//$data = array('file' => new \CURLFile(realpath($path)));//>=5.5
} else {
if (defined('CURLOPT_SAFE_UPLOAD')) {
curl_setopt($curl, CURLOPT_SAFE_UPLOAD, false);
}
//$data = array('file' => '@' . realpath($path));//<=5.5
}
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, 1 );
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // 信任任何证
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLINFO_HEADER_OUT, true);
$result = curl_exec($curl);
$error = curl_error($curl);
//var_dump($error);
curl_close($curl);
return $result;
}
``
public function upload(){
$url = '你的第三方上传地址';
$file = $this->request->file('file');
$ext = pathinfo($file->getInfo('name'))['extension'];
$mime = $file->getInfo('type');
//这个是是关键
$postData = [
'file' => new \CURLFile(realpath($file->getPathname()), $mime, ".{$ext}"),
];
$header = array("Authorization:$Authorization");
$res = $this->curlUploadFile($url, $postData,$headers);
if($res['code'] == 0 && $res['data']['url'] != ""){
$this->success(__('上传成功。'), null, [
'url' => $res["data"]["url"],
'size' => $res["data"]["size"],
'duration' => 0
]);
}else{
$this->error('上传失败');
}
}