微信上传永久素材并保存图片URL到数据库

时间:2024-03-06 16:23:52

基于tp5编写的

一下只为核心代码,不是完整的。

Wechat.php需要继承Base.php才可以使用它里面的方法。

Wechat.php下的添加图片方法如下:

 1  public function add()//上传图片素材
 2     {  
 3         //echo $_SERVER[\'DOCUMENT_ROOT\'];
 4         //$this->upload();
 5         if(request()->isPost()){
 6           $date=date("Y-m-d h:i:s");
 7           $data[\'date\']=$date;
 8                //图片上传
 9           if($_FILES[\'pic\'][\'tmp_name\']){
10              $file = request()->file(\'pic\');
11              // 移动到框架应用目录/public/static/ 目录下
12              $info = $file->move(ROOT_PATH . \'public/static\' . DS . \'uploads\');
13              // var_dump( $info);
14              if($info){
15              // 成功上传后 获取上传信息
16              $data[\'pic\']=\'uploads/\'.date(\'Ymd\').\'/\'.$info->getFilename(); 
17              $url=$this->upload($data[\'pic\']);
18              $data[\'url\']=$url;
19              //echo $info->getFilename(); die;
20              // echo  $data[\'pic\']; die;
21              }else{
22              // 上传失败获取错误信息
23              return $this->error($file->getError());
24              }
25             
26             //图片上传
27            if(\think\Db::name(\'sucai\')->insert($data)){
28                 return $this->success(\'添加成功!\',\'sucai\');
29             }else{
30                 return $this->error(\'添加失败!\');
31             }
32           }else{return $this->error(\'请先选择图片\');}    
33         }  
34        
35     }

Base.php里的核心方法如下:

 1 public function upload($pic)//调用上传素材的方法(可用)
 2     {  //$pic为上传成功后的图片相对路径,还需拼接
 3       $access_token=$this->getWxAccessToken();
 4       $type="image";
 5       //$filepath=dirname(__FILE__)."\pic\wo.jpg";//法一:从当前文件夹开始拼接路径,(可用的)
 6       //$filepath= $_SERVER[\'DOCUMENT_ROOT\']."/wexin/public/static/uploads/test.jpg";//法二:从网站根目录拼接路径,(可用的)
 7       $filepath= $_SERVER[\'DOCUMENT_ROOT\']."/wexin/public/static/".$pic;
 8       $filepath=str_replace("/","\\",$filepath);//windows上传需要用\,所以替换一下
 9       $filedata=array("media"=>"@".$filepath);
10       //$url="http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token=$access_token&type=$type";//临时素材接口,(可用)
11       $url="https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=$access_token";//永久素材接口(可用)
12       $result=$this->httpsPic($url,$filedata);
13       $result=json_decode($result,true);
14       $result=str_replace("\\","", $result[\'url\']);//需要用/,替换回来
15       return $result;
16     }
17 
18     public function httpsPic($url,$data)//上传图片素材方法(可用)
19     {
20          $curl=curl_init();
21          curl_setopt($curl,CURLOPT_URL, $url);
22          curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,FALSE);
23          curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,FALSE);
24          if(!empty($data)){
25             curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
26             curl_setopt($curl,CURLOPT_POSTFIELDS,$data);
27          }
28          curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
29          $output=curl_exec($curl);
30          if(curl_error($curl)){
31          curl_error($curl);
32          curl_close($curl);
33          }else{
34             return $output;
35          }
36     }