基於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 }