Laravel实现from的curl文件转发
文件的使用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文件转发的更多相关文章
- curl文件上传有两种方式,一种是post_fileds,一种是infile
curl文件上传有两种方式,一种是POSTFIELDS,一种是INFILE,POSTFIELDS传递@实际地址,INFILE传递文件流句柄! );curl_setopt($ch, CURLOPT_PO ...
- javaCV开发详解之4:转流器实现(也可作为本地收流器、推流器,新增添加图片及文字水印,视频图像帧保存),实现rtsp/rtmp/本地文件转发到rtmp流媒体服务器(基于javaCV-FFMPEG)
javaCV系列文章: javacv开发详解之1:调用本机摄像头视频 javaCV开发详解之2:推流器实现,推本地摄像头视频到流媒体服务器以及摄像头录制视频功能实现(基于javaCV-FFMPEG.j ...
- Laravel 5 中使用 Laravel Excel 实现 Excel/CSV 文件导入导出功能
1.简介 Laravel Excel 在 Laravel 5 中集成 PHPOffice 套件中的 PHPExcel,从而方便我们以优雅的.富有表现力的代码实现Excel/CSV文件的导入和导出. 该 ...
- java文件转发
实际开发情景中,有时会遇到文件需要从一台服务器发到另一台服务器的情况,比如外网发到内网,服务器之间文件同步的情况. 就可以用文件转发. 转发端代码: /** * * @param fileName 保 ...
- php curl文件上传兼容php5.0~5.6各版本
PHP 5.0~5.6 各版本兼容的cURL文件上传 最近做的一个需求,使用PHP cURL上传文件.踩坑若干,整理如下. 不同版本PHP之间cURL的区别 PHP的cURL支持通过给CURL_POS ...
- 在 Laravel 5 中使用 Laravel Excel 实现 Excel/CSV 文件导入导出功能
1.简介 Laravel Excel 在 Laravel 5 中集成 PHPOffice 套件中的 PHPExcel ,从而方便我们以优雅的.富有表现力的代码实现Excel/CSV文件的导入和 导出 ...
- Laravel 5使用Laravel Excel实现Excel/CSV文件导入导出的功能详解
1.简介 本文主要给大家介绍了关于Laravel 5用Laravel Excel实现Excel/CSV文件导入导出的相关内容,下面话不多说了,来一起看看详细的介绍吧. Laravel Excel 在 ...
- laravel基础课程---7、文件处理、闪存、cookie(cookie原理和使用场景)
laravel基础课程---7.文件处理.闪存.cookie(cookie原理和使用场景) 一.总结 一句话总结: 页面请求服务器的时候是把这个页面中所有的cookie都带上了的,cookie里面也存 ...
- laravel框架手动删除迁移文件后再次创建报错
手动删除laravel框架数据表迁移文件后再次创建报错 如下图: 执行创建操作之后会在autoload_static.php及autoload_classmap.php这两个文件中添加迁移文件的目录. ...
随机推荐
- python基础语法5 函数定义,可变长参数
函数 1.什么是函数 函数就是一种工具. 可以重复调用 2.为什么要用函数 1.防止代码冗(rong)余 2.代码的可读性差 3.怎么用函数 1.定义函数-->制造工具 2.调用函数--> ...
- 如何移除woocommerce的tabs【wordpress技巧】
我们在用woocommerce建站时有时不想让产品的review显示出来,以使单个产品页面简单而令人印象深刻,那么要如何移除tab呢?可以在主题的function.php文件定义移除tabs函数,代码 ...
- 文件搜索命令(命令搜索)which、whereis
一.which命令: 搜索命令所在目录(绝对路径)或者别名信息. 用户可以使用的命令存放在: /bin /usr/bin 管理员使用的命令: /sbin /usr/sbin 1.带有别名的命令: 二. ...
- 关于api创建监控项,添加灵活调度的事件间隔
在api文档中没有明确说明,可以查询数据库,得到的是一个字符串,
- vue单项数据流
当父组件给子组件传递数据的时候,子组件只能读取,不能改写.因为如果子组件改变父组件传递过来的数据时会造成数据流难以理解.
- UE4破碎物体
1. 创建可破碎物体 首先,启用插件: 然后,选择一个模型,右键,创建可破碎物体: 2. 创建蓝图 把新创建出来的物体创建为蓝图: 击碎物体的蓝图节点: 当然,要把那个物体(图上的Destructib ...
- 「SDOI2014」旅行(信息学奥赛一本通 1564)(洛谷 3313)
题目描述 S国有N个城市,编号从1到N.城市间用N-1条双向道路连接,满足从一个城市出发可以到达其它所有城市.每个城市信仰不同的宗教,如飞天面条神教.隐形独角兽教.绝地教都是常见的信仰. 为了方便,我 ...
- 小程序使用npm安装第三方包
安装vant 小程序UI库 进到小程序目录,在地址栏中cmd 进入DOS界面 npm init -f 安装vant 小程序UI库 npm i vant-weapp -S --production ...
- js 创建xml元素
function createXML(pathData) { var xmlDOM = createXMLDOM(); //参考:http://iceworldvip.blog.51cto.com/5 ...
- mysql 层级结构查询
描述:最近遇到了一个问题,在mysql中如何完成节点下的所有节点或节点上的所有父节点的查询? 在Oracle中我们知道有一个Hierarchical Queries可以通过CONNECT BY来查询, ...