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这两个文件中添加迁移文件的目录. ...
随机推荐
- 11、Python函数基础(定义函数、函数参数、匿名函数)
函数先定义函数,后调用 一.定义函数: 1.简单的规则: 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 (). 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数. 函 ...
- LwIP应用开发笔记之八:LwIP无操作系统HTTP客户端
前面我们实现了TCP服务器和客户端的简单应用,接下来我们实现一个基于TCP协议的应用协议,那就是HTTP超文本传输协议 1.HTTP协议简介 超文本传输协议(Hyper Text Transfer P ...
- layoutSubviews的缺省实现是使用约束进行布局
Discussion The default implementation of this method does nothing on iOS 5.1 and earlier. Otherwise, ...
- 通过100张图一步步理解CNN
https://blog.csdn.net/v_july_v/article/details/79434745 Youtube上迄今为止最好的卷积神经网络快速入门教程 https://www.bili ...
- presto-gateway nodejs client
目前已经有了好几个presto nodejs 的client,为了方便presto-gateway 的连接,修改了一个现有的nodejs client 可以方便的连接presto-gateway 原理 ...
- 用jdk1.6的pack200和unpack200,对jar文件进行压缩和解压 .pack.gz
用jdk1.6的pack200和unpack200,对jar文件进行压缩和解压 解压xxx.jar.pack.gz为xxx.jar:unpack200 -r xxx.jar.pack.gz xxx.j ...
- 您使用的私钥格式错误,请检查RSA私钥配置,charset = utf-8 密钥集不存在
支付宝突然报异常 您使用的私钥格式错误,请检查RSA私钥配置,charset = utf-8 经排查:系统日志 System.Security.Cryptography.CryptographicEx ...
- pandas把'<m8[ns]'类型转换为int类型进行运算
工作中经常碰到两列数据为date类型,当这两列数据相减或者相加时,得到天数,当运用这个值进行运算会报错:ufunc true_divide cannot use operands with types ...
- ELK实时日志分析平台环境部署,以及可视化展示
ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是开源软件.新增了一个FileBeat,它是一个轻量级的日志收集处理工具(Agent) ...
- 运行虚拟机报错:CPU acceleration status: HAXM is not installed on this machine
运行虚拟机报错:CPU acceleration status: HAXM is not installed on this machine. 这是因为SDKmanage没有安装HAXM ,于是打开S ...