文件的使用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. IDEA 中 Git Commit message 编写

    IDEA安装插件 Git Commit Template 1. HeaderHeader的部分只有一行,包括三个字段: type(必需), scope(可选), subject(必需) 对应到idea ...

  2. 将Eclipse设置为黑色主题

    将Eclipse设置为黑色主题 觉得黑色的主题&配色很高大上,于是花了点时间实践出下面一种方法. 修改代码编辑区配色 修改整个软件主题 先上成果图: 但是进度条依旧是白色的,不知道怎么弄了╮( ...

  3. SpringMVC+Mybatis学习

    简单Web项目搭建: 一.流程 1. 导包 n个springMVC: 2个mybatis<其中一个是mybatis-spring>: 3个jackson包: 2. xml配置 web.xm ...

  4. 洛谷p2370yyy2015c01的U盘题解

    没什么特殊的想法 就是看自己很久没有更新关于题解类的文章了而已 (其实这是我好久之前做的, 只是把它从洛谷博客搬到了这里而已) 题目 首先分析题目要二分 他长成这个亚子太二分了 所以就要二分 最好是先 ...

  5. Map、Set、List是否有序

    首先我们应该清楚这个概念:这里的有序和无序不是指集合中的排序,而是是否按照元素添加的顺序来存储对象. list是按照元素的添加顺序来存储对象的,因此是有序的.他的实现类ArrayList.Linked ...

  6. Eureka 的高级使用

    基础架构Eureka架构中的三个核心角色: 服务注册中心 Eureka的服务端应用,提供服务注册和发现功能,就是刚刚我们建立的eureka-demo 服务提供者 提供服务的应用,可以是SpringBo ...

  7. EAccessViolation

    Access Violation(非法访问),General Protection Fault(一般保护性错误)或者Invalid Page Fault(无效页面错误),虽然说法不一样,但本质上总是由 ...

  8. 028_Mac急救箱快捷键

    一. (1) 1.shift + control + option + 电源键 +长按10秒 "重置系统管理器" 2.option + command + P + R + 按1下电 ...

  9. Transaction 那点事儿

    Transaction 那点事儿 https://my.oschina.net/huangyong/blog/160012

  10. tensorflow 13:多gpu 并行训练

    多卡训练模式: 进行深度学习模型训练的时候,一般使用GPU来进行加速,当训练样本只有百万级别的时候,单卡GPU通常就能满足我们的需求,但是当训练样本量达到上千万,上亿级别之后,单卡训练耗时很长,这个时 ...