开发者社区> 问答> 正文

php程序上传多媒体文件接口代码

       由于钉钉官方文档只对上传多媒体文件接口进行了简单的说明,也只给了java的程序示例,如果采用php程序的话,对上传文件遇到的问题,就不太好解决了。
以下是经过测试,并成功上传文件的php程序利用curl函数,供大家参考。
首先我们写一个上传文件的方法
/**
*$url 为 钉钉的接口地址
*$param 为文件信息
*/

function http_post($url,$param){
        $oCurl = curl_init();
        //下面判断https 和 http;因为钉钉接口是 Https请求
        if(stripos($url,"https://")!==FALSE){
                curl_setopt($oCurl, CURLOPT_SSL_VERIFYPEER, FALSE);
                curl_setopt($oCurl, CURLOPT_SSL_VERIFYHOST, false);
        }
        curl_setopt($oCurl, CURLOPT_URL, $url);
        curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1 );
        curl_setopt($oCurl, CURLOPT_POST,true);
        curl_setopt($oCurl, CURLOPT_POSTFIELDS,$param);  
        $sContent = curl_exec($oCurl);
        $aStatus = curl_getinfo($oCurl);
        curl_close($oCurl);
        if(intval($aStatus["http_code"])==200){
                return $sContent;
        }else{
                return false;
        }
}


//接下来调用方法,上传文件,这次上传是图片格式type=image
$url = 'https://oapi.dingtalk.com/media/upload?access_token=ACCESS_TOKEN&type=image';
     请将上面url 里的 ACCESS_TOKEN 换成 真实的调用接口凭证 $file['media'] = "@/www/test.jpg";//这里的“/www/test.jpg”文件的绝对路径
$res = http_post($url,$file);
if($res['errcode'] == 0){
  //文件上传成功 $res['media_id'] 就是返回的 素材id
}else{
  echo "上传失败";
}

   另外官方给的信息 提示需要用 :使用multipart/form-data请求上传文件,这里curl 函数 CURLOPT_POSTFIELDS 里如果传的 一个数组 默认就会以multipart/form-data请求,
所以 文件数据是这样写的:$file['media'] = "@/www/test.jpg"; 以数组形式。



展开
收起
梁东坡 2016-01-07 11:42:03 9199 0
5 条回答
写回答
取消 提交回答
  • Rephp程序上传多媒体文件接口代码
    这个方法不行,加了@会返回空,不加会返回参数不合法
    2016-07-04 17:18:30
    赞同 展开评论 打赏
  • 回 3楼不大的帖子
    能不能把curl的返回值也打印一下看看
    $sContent = curl_exec($oCurl);
            $aStatus = curl_getinfo($oCurl);
    把这个返回值打印出来看看是什么错误
    2016-05-19 10:49:55
    赞同 展开评论 打赏
  • Rephp程序上传多媒体文件接口代码
    你好,一直提示【 string(47) "{"errcode":40035,"errmsg":"不合法的参数"}"】,请问这是什么问题,我的代码如下:



    require_once(__ROOT__."/Dkaifa/env.php");
            $access_token=$this->access_token(CORPID,SECRET);
            
            $url = "https://oapi.dingtalk.com/media/upload?access_token=".$access_token."&type=image";
            
            $file['media'] = "@/wuye.sxxiangda.com/ma.jpg";   //这里的“/www/test.jpg”文件的绝对路径
            $res = $this->http_post($url,$file);
            if($res['errcode'] == 0){
                dump($res);
                //文件上传成功 $res['media_id'] 就是返回的 素材id
            }else{
                echo "上传失败";
            }
    2016-04-14 21:01:27
    赞同 展开评论 打赏
  • Rephp程序上传多媒体文件接口代码
    2016-04-12 00:01:11
    赞同 展开评论 打赏
  • Rephp程序上传多媒体文件接口代码
    谢谢您的支持
    2016-01-07 22:19:58
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
PHP 2017.北京 全球开发者大会——高可用的PHP 立即下载
PHP安全开发:从白帽角度做安全 立即下载
复杂PHP系统性能瓶颈排查及优化 立即下载