2019独角兽企业重金招聘Python工程师标准>>>

遇到一个需求是要把前端的上传文件通过php拿到然后再上传给接口,因为不能浏览器不能跨域上传拿到返回值,所以只能用前端上传,然后php拿到文件再上传一次。之前在网上找到curl方式不能上传二进制文件流,失败告终,代码如下:

上传函数:

function curl_upload_file($url,$filename,$path,$type,$d){  
        if (class_exists('\CURLFile')) {  
            $data['file'] = new \CURLFile(realpath($path),$type,$filename);  
        } else {  
            $data['file'] = '@'.realpath($path).";type=“.$type.”;filename=".$filename;  
        }

$ch = curl_init();  
        curl_setopt($ch, CURLOPT_URL, $curl);  
        curl_setopt($ch, CURLOPT_POST, true );  
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);  
        curl_setopt($ch, CURLOPT_HEADER, false);  
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  
        $return_data = curl_exec($ch);  
        curl_close($ch);  
        return $return_data;  
    }

函数使用:

$file = $_FILES['file'];

$data = $this->curl_upload_file($url, $file['name'], $file['tmp_name'], $file['type'],$request);

失败告终。

之后又在网上找到了二进制文件流的方式来模拟上传,终于成功,特写上完整代码

public function batchUpload(){

ini_set('upload_max_filesize', '10M');  
        ini_set('post_max_size', '10M');  
        ini_set('memory_limit', '128M'); 
        $request = array();
        $request['type'] = $req->getParameter('type','1');
        $request['userToken'] = $this->userToken;
        $request['apiKey'] = $this->apiKey;
        $url ="http:www.test.com/comdata/importExcelSuit?";
        $result = array();
        $result['success'] = 1;

$allowtype = array("xlsx", "xls");
        $file = $_FILES['file'];
        $aryStr = explode(".", $file['name']);
        $allowsize = 10485760;
        if (!in_array(strtolower($aryStr[count($aryStr)-1]), $allowtype)) {
            $result['success'] = -1;
            $result['msg'] = "请上传excel文件!";

}
   
        if ($file['error'] != 0) {  
            $result['success'] = -1;  
            $result['msg'] = '上传出错';  
        }

if ($file['size'] > $allowsize) {
            $result['success'] = -1;  
            $result['msg'] = '请上传文件大小小于10M'; 
        }

if($result['success']!=-1){
            
            $fileurl = $url .'?'. http_build_query($request);
            $data = base::sendStreamFile($fileurl,$file['tmp_name']);
            $result['data'] = json_decode($data,true);
            if($result['data']['statuscode'] != 1){
                $result['success'] = -1;
                $result['msg'] =  $result['data']['dataInfo'];
            }else{

$result['success'] = 1;
            }
            
        }

echo json_encode($result);
     
    }

上传函数为

static function sendStreamFile($url,$file)  
    {  
        if (empty($url) || empty($file))  
        {  
            return false;  
        }  
        $opts = array(  
                'http' => array(  
                        'method' => 'POST',  
                        'header' => 'content-type:application/x-www-form-urlencoded',  
                        'content' => $file  
                )  
        );  
        $context = stream_context_create($opts);  
        $response = file_get_contents($url, false, $context);  
        return $response;  
          
    }

所有上传函数都是从网上down下来,感谢各位前辈的无私分享,因为来源比较杂,无法标明出处,我只是代码的搬运工。

转载于:https://my.oschina.net/u/2366458/blog/1491167

php模拟input 的file上传文件相关推荐

  1. Input type=“file“上传文件change事件只触发一次解决方案

    Input type="file"上传文件change事件只触发一次解决方案 参考文章: (1)Input type="file"上传文件change事件只触发 ...

  2. input type='file' 上传文件时显示文件名及上传进度

    https://blog.csdn.net/qq_36687640/article/details/78551217 1.input type='file' 上传文件时显示文件名及上传进度 <i ...

  3. 使用input type=file 上传文件时需注意

    在asp.net的中使用<input type='file' />控件上传文件对文件的大小有限制,默认情况下大概在4m左右,如果上传再大的文件时就会出页面无法显示的错误. 修改web.co ...

  4. 将input[type=file]上传文件隐藏在按钮下面,隐藏掉默认的样式

    直接上代码: <button style="position:relative;" class="btn btn-info btn-fill btn-wd" ...

  5. 实现php a标签文件,HTML_如何点击a标签实现弹出input file上传文件对话框,html 复制代码代码如下: SPAN - phpStudy...

    如何点击a标签实现弹出input file上传文件对话框 html 复制代码代码如下: <div> <a href="###">添加图片a> < ...

  6. Input file 上传文件

    Input file 上传文件 介绍 <input> type 类型为 file 的 input 元素使得用户可以选择一个或多个元素以提交表单的方式上传到服务器上,或者通过 Javascr ...

  7. ajax+ashx 完美实现input file上传文件

    1.input file 样式不能满足需求 <input type="file" value="浏览" /> IE8效果图:    Firefox效 ...

  8. php input file 上传文件类型,php轻松实现文件上传功能

    本文分为五个部分针对php上传文件进行分析讲解,具体内容如下 文件上传变量 将服务器上的临时文件移动到指定目录下 php.ini上传相关配置 error错误号 单文件上传实例 1.文件上传变量 //$ ...

  9. java 模拟post上传文件_JAVA模拟HTTP post请求上传文件

    在开发中,我们使用的比较多的HTTP请求方式基本上就是GET.POST.其中GET用于从服务器获取数据,POST主要用于向服务器提交一些表单数据,例如文件上传等.而我们在使用HTTP请求时中遇到的比较 ...

最新文章

  1. epoch,iteration,batch,batch_size
  2. 任何网站优化都离不开的四个方向是什么?
  3. php 文件迭代对象,通过PHP中的stdClass对象进行迭代
  4. 泊松图像融合(泊松融合)
  5. ANTLR 4的C#实例
  6. Spring Data之MongoDB配置
  7. 讲的真透彻!还有人不知道什么是AndroidX的吗?已拿offer入职
  8. 安装Sqlserver2008的问题
  9. iPhone SE 3 5G版发布在即 旧款将降价到千元出头
  10. Excel文件处理实战-Python编程进阶
  11. 天涯怎么引流到qq?天涯社区如何靠发帖子引流?
  12. PIP卸载升级与安装不成功
  13. JUCE框架教程(2)—— 创建一个基本的音频/MIDI 插件第一部分:设置
  14. 第三方支付接口开发原理
  15. 广州科二化龙考场_广州考驾照[科目二]化龙考场.考试详解
  16. about-page
  17. 微信小程序之文件上传PHP后台接收
  18. 全自动化处理每月缺卡数据,输出缺卡人员信息
  19. 【食品化学与营养】第二章 水的化学与营养 笔记
  20. 2021哪款蓝牙耳机好?音质、颜值顶尖的五款优秀蓝牙耳机推荐

热门文章

  1. CSS从零开始(1)--CSS基础语法
  2. C# WPF MVVM 实战 – 3 – 树结构
  3. POJ 3984 迷宫问题 (Dijkstra)
  4. MongoDB与Tokyo Tyrant性能比较(2):并发写入操作
  5. ZedGraph webform 初学小例子 (代码有详细解释)
  6. CV学习笔记-边缘提取
  7. ccf矩阵java_CCF系列之矩阵(201512-5)
  8. 2345浏览器网址_清理流氓网站2345.com劫持浏览器
  9. java final域_【Java】final 域的内存语义
  10. numactl mysql_CentOS学习笔记 - 10. 开发机mysql安装