我的编程空间,编程开发者的网络收藏夹
学习永远不晚

php curl文件流

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

php curl文件流

php curl文件流

应用场景:

很多时候我们接第三方接口时遇到参数需要传文件流格式的字段,不能直接传图片链接的情况。又不能直接请求第三方接口,只能采取从客户端先请求我方接口,再通过我方服务器请求第三方接口的情况,需要我方把接收到的文件流原封不动上送给第三方。首先这个原封不动就很难,因为从客户端过来我们接收到的文件就已经是个文件数组了,而且后端无法获取客户端上传文件的本地路径,因为浏览器为了安全起见已经屏蔽了上送方的文件路径。
在这里插入图片描述
而且通过file方式上传的,通过post接收是接收不到的,php需要通过函数$_FILES才能接收到,下面是已经上传了两个参数,但post打印只有code参数。
在这里插入图片描述
而文件类型上传怎么能够获取到客户端完整的文件呢
在这里插入图片描述
其实这个tmp_name就是存放这个文件的临时路径,但是无法通过临时路径文件直接curl至第三方接口(其他服务器)。文件传输的思路就是客户端->我方服务器->第三方服务器;这里面有个注意的点是,不能通过临时文件直接上送至第三方服务器。
PHP上传文件类型的方法有
在文件字段的参数值前加上"@"符号,会将它识别为文件流类型,但是我并没有生效,我用的是另外一种用CURLFile类
。请求header的设置很多帖子说设置成content-type:multipart/form-data;但是我试了content-type:text/html;也是没问题的。如下代码:

    public function uploadPictureAction()    {        $post = $this->req->getPost();        // header('content-type:multipart/form-data;charset=utf8');        header('content-type:text/html;charset=utf8');        $ch = curl_init();        //加@符号curl就会把它当成是文件上传处理        $data = [            'code' => 111,            'file' =>  new CURLFile('/mnt/d/www/saas_api/web/upload/picture/1665994115.png'),//这里是固定服务器的文件路径,可以变更成接收的文件路径            // 'file' =>  '@'.'/mnt/d/www/saas_api/web/upload/picture/1665994115.png'        ];        curl_setopt($ch, CURLOPT_URL, "http://127.0.0.1:8086/signagreement/uploadSign");        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);        curl_setopt($ch, CURLOPT_POST, true);        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);        $result = curl_exec($ch);        curl_close($ch);        $this->jsonify([]);    }

以下是我的接收方法:

    public function uploadResultAction()    {        $raw = $this->req->getPost();        echo 'post2:'.json_encode($raw,JSON_UNESCAPED_UNICODE);        echo 'file2:'.json_encode($_FILES,JSON_UNESCAPED_UNICODE);   }

打印出来是这样的
在这里插入图片描述
完整示例是这样的:

    public function registerCompanyAction()    {        if(isset($_FILES['file']) && !$_FILES['file']['error']) { // 文件存在且不报错            $fileName = $_FILES['file']['name']; // 获取文件            $fileExtension = pathinfo($fileName); // 获取文件路径信息            $fileExtension = $fileExtension['extension']; // 获取文件后缀            $time = time(); // 根据时间戳区分            $destinationPath = $_SERVER['DOCUMENT_ROOT'].'/upload/picture/';// 目标文件夹            $newFileName = $destinationPath . $time . "." . $fileExtension; // 完整的url            if(move_uploaded_file($_FILES['file']['tmp_name'], $newFileName)) { // 移动文件到目标路径                echo("文件移动成功");            } else {                die("文件路径出错");            }        }        // header('content-type:multipart/form-data;charset=utf8');        header('content-type:text/html;charset=utf8');        $ch = curl_init();        //加@符号curl就会把它当成是文件上传处理        $data = [            'code' => 111,            'file' =>  new CURLFile($newFileName),            // 'file' =>  '@'.$newFileName        ];        curl_setopt($ch, CURLOPT_URL, "http://127.0.0.1:8086/signagreement/uploadSign");        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);        curl_setopt($ch, CURLOPT_POST, true);        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);        $result = curl_exec($ch);        curl_close($ch);        return $result;    }    ```

来源地址:https://blog.csdn.net/weixin_43928139/article/details/127449117

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

php curl文件流

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

PHP cURL 文件上传

本篇文章将指导如何使用 cURL 和 CURLFile 类将图像文件发送到服务器。这个想法是将图像文件从一个页面发布到另一个页面上的另一个页面。Index.php:首先,我们将文件 image 发送到 index.php。其次,我们将文件重
PHP cURL 文件上传
2024-02-27

怎么使用curl命令下载文件

这篇文章主要介绍“怎么使用curl命令下载文件”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么使用curl命令下载文件”文章能帮助大家解决问题。curl是一个开源的用于数据传输的命令行工具与库,它
2023-06-27

php文件上传的流程步骤是什么

本文将为大家详细介绍“php文件上传的流程步骤是什么”,内容步骤清晰详细,细节处理妥当,而小编每天都会更新不同的知识点,希望这篇“php文件上传的流程步骤是什么”能够给你意想不到的收获,请大家跟着小编的思路慢慢深入,具体内容如下,一起去收获
2023-06-06

Linux使用curl访问网页和wget下载文件

目录一:curl(网页访问,文件传输工具)1、安装2、常用参数3、使用示例二:wget(用于文件下载,在安装软件时会经常用到。)1、安装2、常用参数3、使用示例:三:区别1.下载文件2.下载文件并重命名3.断点续传4.限速下载5.显示响应头
2022-06-05

java文件流怎么保存成文件

要将Java文件流保存为文件,可以使用FileOutputStream类。以下是保存Java文件流的示例代码:javaimport java.io.*;public class SaveFileStreamToFile { publi
2023-10-21

PHP中怎么用流方式实现下载文件

这篇文章主要讲解了“PHP中怎么用流方式实现下载文件”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PHP中怎么用流方式实现下载文件”吧!PHP 中使用流方式下载文件在 PHP 中,可以使用
2023-07-05

java怎么获取文件流的文件名

在Java中,可以通过File类的getName()方法来获取文件流的文件名。例如:import java.io.File;public class Main {public static void main(String[] args)
java怎么获取文件流的文件名
2024-02-29

java怎么读取文件输出文件流

Java中可以使用文件输入流(FileInputStream)和文件输出流(FileOutputStream)来读取和输出文件流。读取文件流的步骤如下:1. 创建一个File对象,表示要读取的文件。2. 创建一个FileInputStrea
2023-09-20

3-4 文件流类FileStream

3-2  文件流类FileStreamu本节学习目标:nFileStream文件流类nFileStream文件流类的创建nFileMode和FileAccess,FileShare方法基本介绍及注意事项用File类提供的方法在创建或打开文件
2023-01-31

php文件是什么文件

PHP文件是一种文本文件,其文件扩展名为.php。它包含了PHP编程语言的代码,可以在服务器端进行解释和执行。PHP文件可以包含HTML、CSS和JavaScript等内容,用于生成动态的Web页面。当用户请求访问PHP文件时,服务器会解释
2023-09-05

js如何实现文件流式下载文件

在JavaScript中,可以使用Blob对象和URL.createObjectURL()方法来实现文件的流式下载。具体步骤如下:1. 将文件内容存储在Blob对象中。Blob对象表示一个不可变、原始数据的类文件对象。2. 使用URL.cr
2023-08-09

java怎么读取文件并输出文件流

要读取文件并输出文件流,可以使用Java的FileInputStream和FileOutputStream类。首先,你需要创建一个FileInputStream对象来读取文件。可以使用该类的构造函数传入要读取的文件的路径作为参数。然后,你
java怎么读取文件并输出文件流
2024-02-29

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录