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

基于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     }
时间: 2024-08-05 12:27:49

微信上传永久素材并保存图片URL到数据库的相关文章

Java 微信公众号上传永久素材的方法

Java 微信公众号上传永久素材的方法 学习了:http://blog.csdn.net/u013791374/article/details/53258275 膜拜一下,源码如下: @RequestMapping(value="create") public String create(@RequestParam MultipartFile file, HttpServletRequest request, HttpServletResponse response, HttpSess

上传永久素材(图片,视频)

using System.Web.Mvc; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Text; using System.Web; namespace BoldSeas.WeChat.UI.OpenApi.Controllers { public class HomeController : BaseCont

第三方微信公众号开发上传永久素材,当是其他类型的素材是参数如何设置

微信开发文档是这样说的,可是也没说清楚这个filename.filelength,conten-type到底是什么... 起初我三个参数都给了,但是搞了半天都返回错误代码41005,缺少多媒体文件数据...好像是这个错..我忘了..反正很莫名其妙... 网上找了很久说啥版本问题的都试过,不行啊... 后来发现还是media这个参数集合给错了...orz... filename是文件地址.filelength要给正确的文件大小...但是到底是啥...最终我都没研究出来... 后来我索性就给个fil

【转】PHP微信上传永久图片素材

$TOKEN="XXXX"; $file = "D:\www\weixin\game.jpg"; $data = array( 'media'=> new CURLFile($file) ); $url = 'https://api.weixin.qq.com/cgi-bin/material/add_material?access_token='.$TOKEN.'&type=image'; $result = curl_posts($url,$dat

asp.net mvc微信公众号开发之上传永久素材

1.上传永久图片素材,注意构造请求头部信息时name="media"就行了 视图代码: @using (Html.BeginForm("UploadFile", "MenuConfig", FormMethod.Post, new { enctype = "multipart/form-data" })) { <span>上传文件</span> <input type="file&quo

微信上传素材返回 &#39;{&quot;errcode&quot;:41005,&quot;errmsg&quot;:&quot;media data missing&quot;}&#39;,php5.6返回

问题描述: php5.5已经把通过@加文件路径上传文件的方式给放入到Deprecated中了.php5.6默认是不支持这种方式了 解决办法curl处理 function curl_post($url, $data, $header = array()){ if(function_exists('curl_init')) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); if(is_array($header) && !emp

微信公众号开发---上传临时素材到公众号遇到的问题:&quot;errcode&quot;:41005,&quot;errmsg&quot;:&quot;media data missing

1.上传临时素材到公众号遇到的问题:"errcode":41005,"errmsg":"media data missing 解决办法:因为php版本的原因,上传素材一直保错.php的curl的curl_setopt 函数存在版本差异 php5.5已经把通过@加文件路径上传文件的方式给放入到Deprecated中了.php5.6默认是不支持这种方式了 特殊处理1:curl_setopt ( $ch, CURLOPT_SAFE_UPLOAD, false);

js上传文件带参数,并且,返回给前台文件路径,解析上传的xml文件,存储到数据库中

ajaxfileupload.js jQuery.extend({ createUploadIframe: function(id, uri) { //create frame var frameId = 'jUploadFrame' + id; if(window.ActiveXObject) { var io = document.createElement('<iframe id="' + frameId + '" name="' + frameId + '&qu

微信公众订阅号 上传临时素材示例

1 try { 2 3 //声明分割线 4 String boundary="-----"; 5 6 //准备前期 7 File file=new File(filePath); 8 URL url=new URL("https://api.weixin.qq.com/cgi-bin/media/upload?access_token=Z_dtsiJWpgghBANNad1B9DS4sgfE9zOLmwIffYmDXDKs4ZWr6wmhX6xYNanplgB8BVsER8J