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这两个文件中添加迁移文件的目录. ...
随机推荐
- try catch 小结 , node的回调callback里不能捕获异常 , 不能被v8优化(现在能了),
<深入浅出Nodejs>时,在第四章 - 异步编程中作者朴灵曾提到,异步编程的难点之一是异常处理,书中描述"尝试对异步方法进行try/catch操作只能捕获当次事件循环内的异常, ...
- vue.js双向绑定之--select获取text
在大多数情况下select下拉菜单都是value和text设置不同的值的,value一般来说是与后台交互的值,而text是前端用来显示的文本: 但是,vue.js对到表单的双向绑定时如果option设 ...
- RookeyFrame 一些心得 或者 调试技巧等
因为没有依赖具体的实现层,类库的输出路径又没有设置在web层的bin目录,所以每次都要拷贝实现层的DLL过去,有时候拷贝过去了还是没有反应,估计是缓存什么的吧, 解决:先那几个web层bin目录的 D ...
- [PHP] Laravel 5.5 的 BCrypt对密码进行加密及密码验证
Laravel 5.5 的 BCrypt对密码进行加密及密码验证 一.加密 方法1) $password= Hash::make('密码'); 方法2) /也可直接使用 bcrypt 的 functi ...
- Linux 系统管理——系统安全及应用
chagen -d 0 ____用户名:下次登录时必须修改密码 ctrl+R:查看历史记录 history:查看历史记录 清除历史记录: >.bash _history echo“”>.b ...
- 洛谷 P5614题解
吐槽:数据好像有点水,直接枚举到200可以得80 points. 另:我还是太弱了,比赛的时候只有90 points,#7死卡不过去,最后发现是没有判断 \(z_1\) 和 \(z_2\) 的范围-- ...
- uni-app 实现分享生成图片
<template> <view> <view class="personal_li" @click="shareClick"&g ...
- 禁止tomcat的Catina.out的累计输出
禁止tomcat的Catina.out的累计输出 1.设置 catina.sh的CATALINA_OUT=/dev/null
- [技术博客] gitlab快速部署流程
这里直接贴出少昂的个人博客链接:https://www.cnblogs.com/HansBug/p/9813627.html
- springboot(1)@SpringBootApplication
首先来看下Spring Boot项目中的运行类,基本上每个项目都会有该启动类: @SpringBootApplication public class Application { public sta ...