感谢您百忙之中抽空看我这个小问题,
实在是解决了好久,但是一直找不到解决方式,我看到您好久之前回答过,也就是在这个网页上
http://q.cnblogs.com/q/69572/
您说是在上传的流中插入\r\n可以解决,但是我还是不太明白怎么插入,我试了一下在这个片段中插入,但还是错误。希望能给予及时回答,非常感谢!!!
看看我自己的回答吧
参考看看:http://blog.csdn.net/yidongapi/article/details/23443933
谢谢,看了这个,但还是没能解决
@myt: 搜索下:media data missing ,挨着看看解决方案。
@幻天芒: 已经解决了这个问题,是和php版本有关系,不同php版本下的curl_setopt函数有所区别,我原来的php版本好像是5.6.3,现在执行成本的php版本是5.5.1。希望对后来者有帮助吧
@myt: 我去,这种小版本都还这么大差异啊。。
@myt: 你好,我也碰到这样的问题,版本问题,但是我不知道怎么改,麻烦帮下忙。。
public function _request($curl,$https='true',$method='GET',$data='null')
{
$ch=curl_init();//初始化会话
// curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false);
//设置
curl_setopt($ch, CURLOPT_URL, $curl); //curl为地址
curl_setopt($ch, CURLOPT_HEADER, false); //不要url的头部
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //输出返回的内容
if($https)
{
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //不需要验证主机
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); //不需要证书验证
}
if($method=='POST')
{
curl_setopt($ch, CURLOPT_POST, true);
@curl_setopt($ch, CURLOPT_POSTFIELDS, $data); //数据处理
}
//执行会话
$content=curl_exec($ch);
//关闭会话
curl_close($ch);
return $content;
}
//素材上传(多媒体上传)
public function _createMedia($type,$file){
$curl='https://api.weixin.qq.com/cgi-bin/media/upload?access_token='.$this->_getAccessToken().'&type='.$type;
// $data = array(
// 'type' => $type,
// 'media' =>curl_file_create('/PATH/TO/FILE')
// 'media' => new CURLFile('/PATH/TO/FILE')
// );
$data['type']=$type;
$data['media']='@'.$file;
$content=$this->_request($curl,true,'POST',$data);
file_put_contents('./media',$content);//将其保存到文件
}
错误:{"errcode":41005,"errmsg":"media data missing hint: [QNpKnA0242e292]"}
1、选择图片,上传资源
$media = $_FILES;
$jssdk = new LocationController(config('appid'), config('appsecret'));
$res = $jssdk->uploadImage(json_encode($media));
dump($res);die;
2、自己封装的图片上传函数:
public function uploadImage($media)
{
$url = 'https://api.weixin.qq.com/cgi-bin/media/upload?access_token=' . $this->getAccessToken();
$url .= '&type=image';
$rel = http_curl($url,true,10,'post',$media);
return $rel;
}
3、自己封装的http_curl函数
function http_curl($url, $isHttps = true, $timeout = 10, $type = 'get', $arr = ''){
// 1. 初始化
$ch = curl_init();
// 2. 设置选项
curl_setopt($ch, CURLOPT_URL, $url); //设置请求url
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); //允许 cURL 函数执行的最长秒数。
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //设置为1表示稍后执行的curl_exec函数获取的信息以字符串返回,而不是直接输出
curl_setopt($ch, CURLOPT_HEADER, 0);//设置为0表示不返回HTTP头部信息。
if ($isHttps) {
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查,以防获取https地址报错
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // 从证书中检查SSL加密算法是否存在,以防获取https地址报错
}
if ($type == 'post') {
curl_setopt($ch, CURLOPT_POST, 1); //设置为post请求
curl_setopt($ch, CURLOPT_POSTFIELDS, $arr); //绑定post参数
}
// 3. 执行并获取HTML文档内容
$output = curl_exec($ch);
// 4. 释放curl句柄
curl_close($ch);
if($output === FALSE){
return "CURL Error:".curl_error($ch);
}
//直接返回数组
return json_decode($output,true);
//return $output;
}
我知道图片资源不对,但是不知道该怎么上传,楼主能解答一下么,多谢,我php版本是5.6的
问题解决了,哈哈
在cli模式下,使用 curl命令就ok了。
比如切换到要上传的图片同路径下,使用下面的命令,后面的token换成自己的
curl -F media=@teacher.png -F type=image "https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=36_iK1v