文件的使用curl分发时发现不能直接将其传入curl,需要使用CURLFile()来实现

分发类

 <?php
/**
* 请求转发控制器
* Created by PhpStorm.
* User: xinchen
* Date: 2019/07/11
* Time: 18:10
*/ namespace App\Http\Controllers; use App\Traits\CurlTraits;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\Storage; class PortForwardController extends Controller
{
use CurlTraits; /**
* 分发请求
* @param Request $request
* @param $method
* @param $system_urlpok
* @param $requset_url
* @return array|bool|mixed
*/
public function ForwardRequest(Request $request,$method,$system_url){
//将请求数据改为数组
$arr = $request->toArray(); //获取请求的url
$requset_url = $arr['url']; //需要在sercice 添加端口配置
$system_url = Config::get('services.project_ip')[$system_url]; //拼接url
$url = $system_url . $requset_url; //获取请求方式
$requestMethod = $method == 'post' ? 1 : 0; //去掉多余参数
unset($arr['url']);
unset($arr['token']); //获取参数
$params = $arr; $fileCharater = $request->file('file');
if($fileCharater){
if ($fileCharater->isValid()) {
//获取文件相关信息
$originalName = $fileCharater->getClientOriginalName(); // 文件原名
$ext = $fileCharater->getClientOriginalExtension(); // 扩展名
$realPath = $fileCharater->getRealPath(); //临时文件的绝对路径 // 判断文件是否为指定的上传文件后缀 该步骤可以删除,除非确定只需要该类型
// if (!in_array($ext, array('xls', 'xlsx'))) {
// 返回上一次请求位置,并携带错误消息
//return redirect()->back()->withErrors('请输入xls或xlsx后缀文件')->withInput();
//}
$filename = date('Y-m-d') .$originalName. '-' . uniqid() . '.' . $ext;
Storage::disk('gateway')->put($filename, file_get_contents($realPath)); //文件存到本地,需要在config文件夹的filesystem的定义
$filePath = storage_path('gateway/'.$filename);
$obj = new \CURLFile($filePath);
$params['file'] = $obj;
}
} //判断网址是否为https
$https = isHttps($url); //使用curl获取数据
$res = $this->curl($url,$params,$requestMethod,$https); if(isset($filePath)){
unlink($filePath);
} if(!$res) {
//数据获取失败
return [
"status" => "error",
'code' => 4000000,
'message' => '数据加载失败,接口报错,请联系管理员',
'data' => []
];
}else{
//获取成功,直接返回
return $res;
}
} public function testView(){
return view('testup');
}
}

config文件夹的filesystem添加本地空间目录

 // 新建一个本地端gateway空间(目录) 用于存储上传的文件
'gateway' => [ //名字需要与上面分发类代码中的一致 'driver' => 'local', // 文件将上传到storage/exports目录
'root' => storage_path('gateway'), ],

Curl的trait

 <?php
/**
* curl公用trait
* Created by PhpStorm.
* User: xinchen
* Date: 2019/07/12
* Time: 09:28
*/ namespace App\Traits; trait CurlTraits
{ /**
* 获取当前用户服务中的店铺
* **/
public static function curl($url, $params = false, $ispost = 0, $https = 0)
{
// $httpInfo = array();
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
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');
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
if ($https) {
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // 对认证证书来源的检查
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); // 从证书中检查SSL加密算法是否存在
}
if ($ispost) {
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
curl_setopt($ch, CURLOPT_URL, $url);
} else {
if ($params) {
if (is_array($params)) {
$params = http_build_query($params);
}
curl_setopt($ch, CURLOPT_URL, $url . '?' . $params);
} else {
curl_setopt($ch, CURLOPT_URL, $url);
}
} $response = curl_exec($ch); if ($response === FALSE) {
//echo "cURL Error: " . curl_error($ch);
return false;
}
// $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); //暂时不需要
// $httpInfo = array_merge($httpInfo, curl_getinfo($ch)); //暂时不需要
curl_close($ch); return $response;
}
}

Laravel实现from的curl文件转发的更多相关文章

  1. curl文件上传有两种方式,一种是post_fileds,一种是infile

    curl文件上传有两种方式,一种是POSTFIELDS,一种是INFILE,POSTFIELDS传递@实际地址,INFILE传递文件流句柄! );curl_setopt($ch, CURLOPT_PO ...

  2. javaCV开发详解之4:转流器实现(也可作为本地收流器、推流器,新增添加图片及文字水印,视频图像帧保存),实现rtsp/rtmp/本地文件转发到rtmp流媒体服务器(基于javaCV-FFMPEG)

    javaCV系列文章: javacv开发详解之1:调用本机摄像头视频 javaCV开发详解之2:推流器实现,推本地摄像头视频到流媒体服务器以及摄像头录制视频功能实现(基于javaCV-FFMPEG.j ...

  3. Laravel 5 中使用 Laravel Excel 实现 Excel/CSV 文件导入导出功能

    1.简介 Laravel Excel 在 Laravel 5 中集成 PHPOffice 套件中的 PHPExcel,从而方便我们以优雅的.富有表现力的代码实现Excel/CSV文件的导入和导出. 该 ...

  4. java文件转发

    实际开发情景中,有时会遇到文件需要从一台服务器发到另一台服务器的情况,比如外网发到内网,服务器之间文件同步的情况. 就可以用文件转发. 转发端代码: /** * * @param fileName 保 ...

  5. php curl文件上传兼容php5.0~5.6各版本

    PHP 5.0~5.6 各版本兼容的cURL文件上传 最近做的一个需求,使用PHP cURL上传文件.踩坑若干,整理如下. 不同版本PHP之间cURL的区别 PHP的cURL支持通过给CURL_POS ...

  6. 在 Laravel 5 中使用 Laravel Excel 实现 Excel/CSV 文件导入导出功能

    1.简介 Laravel Excel 在 Laravel 5 中集成 PHPOffice 套件中的 PHPExcel ,从而方便我们以优雅的.富有表现力的代码实现Excel/CSV文件的导入和 导出  ...

  7. Laravel 5使用Laravel Excel实现Excel/CSV文件导入导出的功能详解

    1.简介 本文主要给大家介绍了关于Laravel 5用Laravel Excel实现Excel/CSV文件导入导出的相关内容,下面话不多说了,来一起看看详细的介绍吧. Laravel Excel 在 ...

  8. laravel基础课程---7、文件处理、闪存、cookie(cookie原理和使用场景)

    laravel基础课程---7.文件处理.闪存.cookie(cookie原理和使用场景) 一.总结 一句话总结: 页面请求服务器的时候是把这个页面中所有的cookie都带上了的,cookie里面也存 ...

  9. laravel框架手动删除迁移文件后再次创建报错

    手动删除laravel框架数据表迁移文件后再次创建报错 如下图: 执行创建操作之后会在autoload_static.php及autoload_classmap.php这两个文件中添加迁移文件的目录. ...

随机推荐

  1. js地理定位对象 navigator.geolocation

    浏览器信息的存储对象(navigator): 在新的API标准中,可以通过navigator.geolocation来获取设备的当前位置,返回一个位置对象,用户可以从这个对象中得到一些经纬度的相关信息 ...

  2. JSON Web Token (JWT) - Weak secret

    This API with its /hello endpoint (accessible with GET) seems rather welcoming at first glance but i ...

  3. OpenCV 学习笔记(9)RGB转换成灰度图像的一个常用公式Gray = R*0.299 + G*0.587 + B*0.114

    https://blog.csdn.net/fly_wt/article/details/86432886 RGB转换成灰度图像的一个常用公式是:Gray = R*0.299 + G*0.587 + ...

  4. [Algorithm] 122. Best Time to Buy and Sell Stock II

    Previous one: https://www.cnblogs.com/Answer1215/p/11974453.html Say you have an array for which the ...

  5. MATLAB画图笔记

    plot函数 plot(x,y)默认格式: 若x,y是向量,则它们必须具有相同的长度.函数将以x为横轴,绘制y. 若x,y都是矩阵,则它们必须具有相同的尺寸,plot函数将针对x的各列绘制y的每列.更 ...

  6. C++后端工程师需要看的书籍

    C++基础书籍<C++ primer><深度探索C++对象模型><Effective C++><more effective C++><STL源码 ...

  7. 05-树8 File Transfer (25 分)

    We have a network of computers and a list of bi-directional connections. Each of these connections a ...

  8. nginx 常用全局变量

    变量 说明 $args 请求中的参数,如www.123.com/1.php?a=1&b=2的$args就是a=1&b=2 $content_length HTTP请求信息里的" ...

  9. Linux搭建简单的http文件服务器111

    http://192.168.31.69:8090/file/http://47.92.90.25:21888/file/在Ubuntu中通过apt-get install apache2 安装apa ...

  10. 大龄IT程序员的救赎之道

    不知道从什么时候开始,中年危机持续刷屏,遍布整个职场,横跨各个行业,对各个细分工种的中年男女或者即将步入中年的青年男女几乎形成了垂直打击,而且中年这个年龄分界线从40岁滑落到35岁,甚至到30岁.笔者 ...