• 通过PHP CURL模拟请求上传文件|图片。


    现在有一个需求就是在自己的服务器上传图片到其他服务器上面,过程:客户端上传图片->存放到本地服务器->再转发到第三方服务器;

    由于前端Ajax受限制,只能通过服务器做转发了。

    在PHP中通过CURL模拟上传文件可以使用(PHP VERSION>=5.6使用的)  

    $stream = new CURLFile(realpath('/var/cyq/228*150.jpg'),'image/jpeg','filename');//定义文件流(第一个参数是文件路径,第二个是文件类型,第三个是post_name)

    如果PHP VERSION<5.6使用 @来声明此为文件上传格式 

    $stream ='@/var/cyq/228*150.jpg');//定义文件流(第一个参数是文件路径,第二个是文件类型,第三个是post_name)

    $post_data = array( 'file'=>$stream );

    $ch = curl_init($this->getUrl()); //初始化
    curl_setopt($ch, CURLOPT_HEADER, 0); //不返回header部分
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch, CURLOPT_POSTFIELDS,$post_data);//post请求的数据
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch,CURLOPT_COOKIE,$this->getCookie());//有cookie放cookie
    curl_exec($ch);

    一般情况以上这种方式就可以实行文件的上传了,但是这种方式发送出去的 

    请求主体内容为:

    ----后面的为浏览器分配的一种标准分隔符

    这部分的声明大多都是一样的,区别就在于

    所以这样的post_data是不够的
    $post_data=[
    'file'=> new CURLFile(realpath('/var/cyq/228*150.jpg'),'image/jpeg','filename'),
    ];
    需要Append多一个参数 $post_data['size']='228*150';
    这样才才可以满足服务器需要的请求参数了;
    new CURLFile()可以用 curl_file_create() 替代

     

  • 相关阅读:
    vue打包传递参数配置域名
    相同域名nginx下部署两个vue项目
    vue项目改造服务端渲染
    vue项目使用less全局变量
    postMessage跨域实现localstorage跨域共享
    node_webkit打包成桌面应用程序
    vue项目本地服务器设置既能localhost访问又能手机ip访问
    GATT scan的流程
    Windows下面的常用的快捷键
    把驱动编译进内核和编译成模块
  • 原文地址:https://www.cnblogs.com/cyq632694540/p/7381597.html
Copyright © 2020-2023  润新知