• 七牛云上传图片


    Qiniu.php
    <?php
    
    namespace app\common\service;
    
    use Qiniu\Auth;
    use Qiniu\Storage\UploadManager;
    
    class Qiniu
    {
        const QINIU_URL = '';
        const ACCESS_KEY = '';
        const SECRET_KEY = '';
        const BUCKET = '';
    
        /**
         * 获取token
         * @return string
         */
        public static function createToken()
        {
            // 构建鉴权对象
            $auth = new Auth(self::ACCESS_KEY, self::SECRET_KEY);
    
            // 生成上传token
            $token = $auth->uploadToken(self::BUCKET, $key = null, 3600, ['mimeLimit' => 'image/*'], true);
    
            // 返回token
            return $token;
        }
    
        /*
         * 上传图片
         * */
        public static function uploads($fileName = 'file')
        {
            $file = request()->file($fileName);
            // 要上传图片的本地路径
            $filePath = $file->getRealPath();
            $ext      = $file->getOriginalExtension(); // 扩展名
    
            // 上传到七牛后保存的文件名
            $key = 'crm/'.substr(md5($file->getRealPath()) , 0, 5). date('YmdHis') . rand(0, 9999) . '.' . $ext;
            // 需要填写你的 Access Key 和 Secret Key
            $accessKey = self::ACCESS_KEY;
            $secretKey = self::SECRET_KEY;
            // 构建鉴权对象
            $auth = new Auth($accessKey, $secretKey);
            // 要上传的空间
            $bucket = self::BUCKET;
            $token = $auth->uploadToken($bucket);
            // 初始化 UploadManager 对象并进行文件的上传
            $uploadMgr = new UploadManager();
            // 调用 UploadManager 的 putFile 方法进行文件的上传
            list($ret, $err) = $uploadMgr->putFile($token, $key, $filePath);
            if ($err !== null) {
                return ["err"=>1,"msg"=>$err,"data"=>""];
            } else {
                //返回图片的完整URL
                return ["err"=>0,"msg"=>"上传完成","data"=>(self::QINIU_URL.$ret['key'])];
            }
        }
    
        /**
         * 上传base64位图片到七牛云
         * $image base64位图片流
         */
        public static function uploadPicBase64($image, $type=null)
        {
            // 去除base64,
            $num = strpos($image,',');
            $image = substr($image, $num+1);
            $str = isset($image)?$image:false;
    
            //生成图片key
            $rand = rand(1111,9999);
            $now = time();
            $name = 'merchants/'.$now.$rand;
            if ($type) {
                $name = $name.'.'.$type;
            }
    
            $Key = base64_encode($name);
    
            $upToken = self::createToken();
    
            if($str)
            {
                $qiniu = self::phpCurlImg("http://upload-z1.qiniu.com/putb64/-1/key/".$Key,$str,$upToken);
                //upload.qiniup.com 上传域名适用于华东空间。华北空间使用 upload-z1.qiniu.com,华南空间使用 upload-z2.qiniu.com,北美空间使用 upload-na0.qiniu.com。
                $qiniuArr = json_decode($qiniu,true);
    
                if(!empty($qiniuArr['key'])&&$qiniuArr['key']==$name)
                {
                    return self::QINIU_URL.$qiniuArr['key'];
                }
                else
                {
                    return false;
                }
            }
            return false;
        }
    
        //七牛base64上传方法
        public static function phpCurlImg($remote_server,$post_string,$upToken)
        {
            $headers = array();
            $headers[] = 'Content-Type:application/octet-stream';
            $headers[] = 'Authorization:UpToken '.$upToken;
            $headers[] = 'Host: upload-z1.qiniu.com';
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL,$remote_server);
            curl_setopt($ch, CURLOPT_HTTPHEADER ,$headers);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string);
            curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
            curl_setopt($ch, CURLOPT_TIMEOUT, 30);
            $data = curl_exec($ch);
            curl_close($ch);
            return $data;
        }
    
        /*
        * 删除图片
        * */
        public static function deletePicture()
        {
            $accessKey = self::ACCESS_KEY;
            $secretKey = self::SECRET_KEY;
            $bucket = self::BUCKET;
    
            $key = request()->param('img');
            $auth = new Auth($accessKey, $secretKey);
            $config = new \Qiniu\Config();
            $bucketManager = new \Qiniu\Storage\BucketManager($auth, $config);
            $err = $bucketManager->delete($bucket, $key);
            if ($err=='') {
                return true;
            }else{
                return false;
            }
        }
    
    }

    普通post上传图片

     $qiuniu = (new Qiniu())::uploads();

    base64格式上传

     $image_data = fread(fopen($file_path, 'r'), filesize($file_path));
            $base64_image = ';base64,'.chunk_split(base64_encode($image_data));
            $qiuniu = (new Qiniu())::uploadPicBase64($base64_image);
            //上传成功,删除本地文件
            if ($qiuniu) {
                $url_img_url = dirname(dirname(app_path())).'/public/'.$file_path;     //本地图片绝对地址
                $url_img_path = iconv('utf-8', 'gbk', $url_img_url);
                if (PATH_SEPARATOR == ':') {
                    //linux
                    unlink($url_img_url);
                } else {
                    //Windows
                    unlink($url_img_path);
                }
            }
            return ['status' => true, 'url' => $qiuniu];
  • 相关阅读:
    ISO14229:2013 之 通过标志输入输出控制InputOutputControlByIdentifier (0x2F)
    ISO14229:2013 之 清除诊断信息ClearDiagnosticInformation (0x14)
    ISO14229:2013 之 通过标志写数据WriteDataByIdentifier (0x2E)
    Git常用命令及方法大全
    High concurrency Architecture Detailed _ Architecture
    Data structures and algorithms in Java, Part 1: Overview
    Java代码优化
    详解二分查找算法
    服务容灾
    分布式限流之一:redis+lua 实现分布式令牌桶,高并发限流
  • 原文地址:https://www.cnblogs.com/bkhdd/p/15923300.html
Copyright © 2020-2023  润新知