Laravel 騰訊雲 Cos 物件儲存 sdk 使用示例 上傳圖片

php_yt發表於2020-06-07

引入官方 sdk

"qcloud/cos-sdk-v5": "2.*"

使用 sdk

<?php
namespace App\Service;
use Qcloud\Cos\Api;
use Illuminate\Support\Facades\Log;

class Cos {

    public static function uploadImg($fileName, $realPath)
    {   
        $cosClient = new \Qcloud\Cos\Client([
            'region' => 'tj', // 華北-tj | 華南->gz | 華中->sh
            'credentials' => [
                'appId' => env('COS_APPID'),
                'secretId'    => env('COS_SECRETID'),
                'secretKey' => env('COS_SECRETKEY')
            ]
        ]);

        try {

            $result = $cosClient->putObject([
                'Bucket'    => 'img-'.env('COS_APPID'), // 儲存桶-appid
                'Key'         => $fileName, // 鍵名==檔名
                'Body'         => fopen($realPath, 'rb'), // 圖片
                'ServerSideEncryption' => 'AES256' // 加密
            ]);

            return $result['Location'];
        } catch (\Exception $e) {
            Log::error('cos exception:'.$e->getMessage());
            return false;
        }
    }
}

進行上傳

// ----------上傳圖片-----------
if( $request->hasFile('img') )
{
    $file = $request->file('img'); // 接受圖片
    if( $file->isValid() ){
        // 上傳成功
        $ext = $file->getClientOriginalExtension(); // 副檔名
        $allow = ['jpg', 'gif', 'png', 'jpeg']; // 支援的型別
        if( !in_array($ext, $allow) ){
            return Y::error('不支援的圖片型別,請上傳JPG|GIF|PNG|JPEG格式圖片。');
        }
        // 判斷大小
        $size = $file->getSize();
        $size = $size/1024/1024;
        if($size > 3){
            return Y::error('上傳的圖片不能超過3M');
        }
        // 進行上傳
        $realPath = $file->getRealPath(); // 檔案的絕對路徑
        $filename = '/chat_img/'.date('Ymd').'/'.date('Ymdhis').'-'.mt_rand(100,999).'.'.$ext; // 定義檔名
        // 騰訊 cos 儲存
        $url = Cos::uploadImg($filename, $realPath);
        if( $url == false ){
            // 如果發生失敗 可以選擇本地儲存 如果不希望本地儲存 刪除這段程式碼
            $disk = Storage::disk('public');
            $res = $disk->put($filename, file_get_contents($realPath)); // 本地儲存
            if( !$res ){
                return Y::error('上傳失敗local');
            }
            $url = $disk->url($filename);
        }else{
            // 拼接 cdn 加速地址
            $url = 'http://xxxx.file.myqcloud.com'.$filename;
            // 或者直接使用原連結
            $url = $url;
        }

    }else{
        return Y::error('上傳失敗2');
    }
本作品採用《CC 協議》,轉載必須註明作者和本文連結

簡潔略帶風騷

相關文章