Laravel8.0 文件上传图片审核及文字审核验证

646 阅读1分钟

首先,要有一个百度云账号并获取到自己的API Key和Secret Key

上代码:在其中更改自己的API Key和Secret Key即可

最终在审核方法下方根据自己的需求进行逻辑处理

<?php
/**
 * Author: csk
 * Email: 2270024421@qq.com
 * Date: 2021/11/5
 * Time: 11:50
 */
 
namespace app\api\controller;
 
 
use app\Request;
 
class Audit
{
 
    /**
     * 内容审核
     */
    public function contentAudit(Request $request)
    {
        $content = $request->post('content');
        $token = $this->getAccessToken('ApiKey ', 'SecretKey ');
 
        $url = 'https://aip.baidubce.com/rest/2.0/solution/v1/text_censor/v2/user_defined?access_token=' . $token;
        $bodys = array(
            'text' => $content
        );
        $res = $this->curlPost($url, $bodys);
 
        //结果转成数组
        $res = json_decode($res, true);
        //根据自己的业务逻辑进行处理
        print_r($res);die;
    }
 
    /**
     * 图片审核
     */
    public function imageAudit(Request $request)
    {
        //如果是表单上传
        $fileTmp = $request->file('image')->getPathname();
        /**
        * 如果是base64类型的文件请先转化为图片文件并获取到相对路径再进行上传
        * $base_img是获取到前端传递的值
        * $base_img = str_replace('data:image/png;base64,', '', 'base64类型文件');
        * 转化:https://www.cnblogs.com/Renyi-Fan/p/9588306.html        
        * 例如:$fileTmp = './static/img/123456789.jpg'        
        */
        $token = $this->getAccessToken('ApiKey ', 'SecretKey ');
        $url = 'https://aip.baidubce.com/rest/2.0/solution/v1/img_censor/v2/user_defined?access_token=' . $token;
        $img = file_get_contents($fileTmp);//本地路径
        $img = base64_encode($img);
        $bodys = array(
            'image' => $img
        );
        $res = $this->curlPost($url, $bodys);
        //结果转成数组
        $res = json_decode($res, true);
        //根据自己的业务逻辑进行处理
        print_r($res);
    }
 
    /**
     * CURL的Post请求方法
     * @param string $url
     * @param string $param
     * @return bool|string
     */
    function curlPost($url = '', $param = '')
    {
        if (empty($url) || empty($param)) {
            return false;
        }
 
        $postUrl = $url;
        $curlPost = $param;
        // 初始化curl
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $postUrl);
        curl_setopt($curl, CURLOPT_HEADER, 0);
        // 要求结果为字符串且输出到屏幕上
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        // post提交方式
        curl_setopt($curl, CURLOPT_POST, 1);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $curlPost);
        // 运行curl
        $data = curl_exec($curl);
        curl_close($curl);
 
        return $data;
    }
 
    /**
     * 获取百度开放平台的票据
     * 参考链接:https://ai.baidu.com/ai-doc/REFERENCE/Ck3dwjhhu
     */
    public function getAccessToken($ApiKey = '', $SecretKey = '', $grantType = 'client_credentials')
    {
 
        $url = 'https://aip.baidubce.com/oauth/2.0/token';
        $post_data['grant_type'] = $grantType;
        $post_data['client_id'] = $ApiKey;
        $post_data['client_secret'] = $SecretKey;
        $o = "";
        foreach ($post_data as $k => $v) {
            $o .= "$k=" . urlencode($v) . "&";
        }
        $post_data = substr($o, 0, -1);
 
        $res = $this->curlPost($url, $post_data);
        //进行把返回结果转成数组
        $res = json_decode($res, true);
        if (isset($res['error'])) {
            exit('API Key或者Secret Key不正确');
        }
        $accessToken = $res['access_token'];
        return $accessToken;
    }
}