Laravel实现from的curl文件转发
文件的使用curl分发时发现不能直接将其传入curl,需要使用CURLFile()来实现
分发类
1 <?php 2 /** 3 * 请求转发控制器 4 * Created by PhpStorm. 5 * User: xinchen 6 * Date: 2019/07/11 7 * Time: 18:10 8 */ 9 10 namespace App\Http\Controllers; 11 12 use App\Traits\CurlTraits; 13 use Illuminate\Http\Request; 14 use Illuminate\Support\Facades\Config; 15 use Illuminate\Support\Facades\Storage; 16 17 class PortForwardController extends Controller 18 { 19 use CurlTraits; 20 21 /** 22 * 分发请求 23 * @param Request $request 24 * @param $method 25 * @param $system_urlpok 26 * @param $requset_url 27 * @return array|bool|mixed 28 */ 29 public function ForwardRequest(Request $request,$method,$system_url){ 30 //将请求数据改为数组 31 $arr = $request->toArray(); 32 33 //获取请求的url 34 $requset_url = $arr['url']; 35 36 //需要在sercice 添加端口配置 37 $system_url = Config::get('services.project_ip')[$system_url]; 38 39 //拼接url 40 $url = $system_url . $requset_url; 41 42 //获取请求方式 43 $requestMethod = $method == 'post' ? 1 : 0; 44 45 //去掉多余参数 46 unset($arr['url']); 47 unset($arr['token']); 48 49 //获取参数 50 $params = $arr; 51 52 $fileCharater = $request->file('file'); 53 if($fileCharater){ 54 if ($fileCharater->isValid()) { 55 //获取文件相关信息 56 $originalName = $fileCharater->getClientOriginalName(); // 文件原名 57 $ext = $fileCharater->getClientOriginalExtension(); // 扩展名 58 $realPath = $fileCharater->getRealPath(); //临时文件的绝对路径 59 60 // 判断文件是否为指定的上传文件后缀 该步骤可以删除,除非确定只需要该类型 61 // if (!in_array($ext, array('xls', 'xlsx'))) { 62 // 返回上一次请求位置,并携带错误消息 63 //return redirect()->back()->withErrors('请输入xls或xlsx后缀文件')->withInput(); 64 //} 65 $filename = date('Y-m-d') .$originalName. '-' . uniqid() . '.' . $ext; 66 Storage::disk('gateway')->put($filename, file_get_contents($realPath)); //文件存到本地,需要在config文件夹的filesystem的定义 67 $filePath = storage_path('gateway/'.$filename); 68 $obj = new \CURLFile($filePath); 69 $params['file'] = $obj; 70 } 71 } 72 73 //判断网址是否为https 74 $https = isHttps($url); 75 76 //使用curl获取数据 77 $res = $this->curl($url,$params,$requestMethod,$https); 78 79 if(isset($filePath)){ 80 unlink($filePath); 81 } 82 83 if(!$res) { 84 //数据获取失败 85 return [ 86 "status" => "error", 87 'code' => 4000000, 88 'message' => '数据加载失败,接口报错,请联系管理员', 89 'data' => [] 90 ]; 91 }else{ 92 //获取成功,直接返回 93 return $res; 94 } 95 } 96 97 public function testView(){ 98 return view('testup'); 99 } 100 }
config文件夹的filesystem添加本地空间目录
1 // 新建一个本地端gateway空间(目录) 用于存储上传的文件 2 'gateway' => [ //名字需要与上面分发类代码中的一致 3 4 'driver' => 'local', 5 6 // 文件将上传到storage/exports目录 7 'root' => storage_path('gateway'), 8 9 ],
Curl的trait
1 <?php 2 /** 3 * curl公用trait 4 * Created by PhpStorm. 5 * User: xinchen 6 * Date: 2019/07/12 7 * Time: 09:28 8 */ 9 10 namespace App\Traits; 11 12 trait CurlTraits 13 { 14 15 /** 16 * 获取当前用户服务中的店铺 17 * **/ 18 public static function curl($url, $params = false, $ispost = 0, $https = 0) 19 { 20 // $httpInfo = array(); 21 $ch = curl_init(); 22 curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); 23 curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36'); 24 curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); 25 curl_setopt($ch, CURLOPT_TIMEOUT, 30); 26 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 27 if ($https) { 28 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // 对认证证书来源的检查 29 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); // 从证书中检查SSL加密算法是否存在 30 } 31 if ($ispost) { 32 curl_setopt($ch, CURLOPT_POST, true); 33 curl_setopt($ch, CURLOPT_POSTFIELDS, $params); 34 curl_setopt($ch, CURLOPT_URL, $url); 35 } else { 36 if ($params) { 37 if (is_array($params)) { 38 $params = http_build_query($params); 39 } 40 curl_setopt($ch, CURLOPT_URL, $url . '?' . $params); 41 } else { 42 curl_setopt($ch, CURLOPT_URL, $url); 43 } 44 } 45 46 $response = curl_exec($ch); 47 48 if ($response === FALSE) { 49 //echo "cURL Error: " . curl_error($ch); 50 return false; 51 } 52 // $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); //暂时不需要 53 // $httpInfo = array_merge($httpInfo, curl_getinfo($ch)); //暂时不需要 54 curl_close($ch); 55 56 return $response; 57 } 58 }
纵然世间炎凉百态!我自依旧初心不改!!