微信公众号永久素材的上传
思路:1.需要上传到本地(因为后面需要用的本地的绝对路径 2.上传到微信服务器 3.添加信息到本地数据库
一、上传图片到本地
文件上传的方法
以下是我的代码
首先更改文件上传的配置
而后写我们的文件上传方法
if (request()->isMethod("post")) {//本地图片上传//判断是否有文件上传 并且上传没有出错if (request()->hasFile("img_url") && request()->file("img_url")->isValid()){$img = request()->file("img_url");//获取图片数据$path = $img->store('img');//上传到img}}
这样本地文件上传就成功了 继续我们的第二步
二、公众平台上传图片
我们得知了上传图片所需要的信息。 而media是curl命令。我们要使用php自带类 CURLFile去处理 且CURLFlie参数必须为绝对路径。所以我们需要先把绝对路径拼接好。
$absolute = public_path("uploads/".$path);//绝对路径
接着我们去调用接口发送请求
//本地上传成功后 服务器上传$url ="https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=".$this->get_access_token()."&type=image";//请求所需信息$data = ["media"=> new \CURLFile($absolute), //因为是curl上传所以要调用php自带函数CURLFile 并且要绝对路径];//发送请求$result = json_decode($this->http_post($url,$data),true);//因为没有说要json格式所以不用转换,但因为下面要用。返回的是json格式我们要转为数组格式
三、添加入库
判断微信平台是否上传成功。成功会返回media_id和url,而失败会返回一个errcode状态码。
if(empty($result["errcode"])){//成功 添加入库$imgsource = new Img;$imgsource->img_name = request()->img_name;$imgsource->img_desc = request()->img_desc;$imgsource->img_url = asset("uploads/".$path);$imgsource->media = $result["media_id"];$imgsource->url = $result["url"];$imgsource->save();return redirect("/source/index");}else{//失败return redirect("/source/index");}
整体代码如下
//添加图片public function img(){if (request()->isMethod("post")) {//本地图片上传//判断是否有文件上传 并且上传没有出错if (request()->hasFile("img_url") && request()->file("img_url")->isValid()){$img = request()->file("img_url");//获取图片数据$path = $img->store('img');//上传到img$absolute = public_path("uploads/".$path);//绝对路径//本地上传成功后 服务器上传$url ="https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=".$this->get_access_token()."&type=image";//请求所需信息$data = ["media"=> new \CURLFile($absolute), //因为是curl上传所以要调用php自带函数CURLFile 并且要绝对路径];//发送请求$result = json_decode($this->http_post($url,$data),true);//因为没有说要json格式所以不用转换,但因为下面要用。返回的是json格式我们要转为数组格式//判断是否上传成功if(empty($result["errcode"])){//成功 添加入库$imgsource = new Img;$imgsource->img_name = request()->img_name;$imgsource->img_desc = request()->img_desc;$imgsource->img_url = asset("uploads/".$path);$imgsource->media = $result["media_id"];$imgsource->url = $result["url"];$imgsource->save();return redirect("/source/index");}else{//失败return redirect("/source/index");}}}}