騰訊cos安裝,上傳圖片實際使用

mjc123456發表於2020-08-23
1.安裝騰訊cos依賴包
composer require freyo/flysystem-qcloud-cos-v5
2..env檔案中增加配置
#騰訊cos
COS_APPID=你自己的appid
COS_SECRETID=你自己的配置
COS_SECRETKEY=你自己的key
3.新建控制器cosController.php
<?php

namespace App\Http\Controllers\Common;
use Qcloud\Cos\Api;
use Illuminate\Support\Facades\Log;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Model\Pictures;
/**
 * 騰訊cos
 */
class CosController extends Controller
{

    /**
     * cos上傳方法
     * @param  [type] $fileName [description]
     * @param  [type] $realPath [description]
     * @return [type]           [description]
     */
    public function uploadImg($fileName, $realPath)
    {   
        $cosClient = new \Qcloud\Cos\Client([
            // 區域,這裡的區域要寫對,不然也會有錯誤
            'region' => "ap-chongqing",
            'schema' => 'http',
            'credentials' => [
                'appId' => env('COS_APPID'),
                'secretId'    => env('COS_SECRETID'),
                'secretKey' => env('COS_SECRETKEY')
            ]
        ]);

        try {

            $result = $cosClient->putObject([
                // 儲存桶名字,注意沒有-appid,騰訊文件是錯的
                'Bucket'    => "ceshi", // 儲存桶-appid
                'Key'         => $fileName, // 鍵名==檔名
                'Body'         => fopen( $realPath , 'rb' ), // 圖片
                'ServerSideEncryption' => 'AES256' // 加密
            ]);

            return $result['Location'];

            // 公有私密訪問需要獲取訪問地址
            // $bucket = "gzc"; //儲存桶,格式:BucketName-APPID
            // $key = $fileName; //物件在儲存桶中的位置,即稱物件鍵
            // $signedUrl = $cosClient->getObjectUrl($bucket, $key, '+10 minutes');
            // 上傳成功
            // return $signedUrl;
        } catch (\Exception $e) {
            Log::error('cos exception:'.$e->getMessage());
            return false;
        }
    }

    /**
     * 上傳圖片
     * @param  Request $request [description]
     * @return [type]           [description]
     */
    public function uploadImage( Request $request ) {

        try {
            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 $this->fail( 30013 );
                    }
                    // 判斷大小
                    $size = $file->getSize();
                    $size = $size/1024/1024;
                    if($size > 3){
                        return $this->fail( 30007 );
                    }
                    // 進行上傳
                    $realPath = $file->getRealPath(); // 檔案的絕對路徑
                    $filename = date('Ymd').'/'.date('Ymdhis').'-'.mt_rand(100,999).'.'.$ext; // 定義檔名

                    // 騰訊 cos 儲存
                    $url = $this->uploadImg($filename, $realPath);
                    if( $url == false ){
                        // 上傳失敗
                        return $this->fail( 30007 );
                    }else{

                        // 儲存圖片,注意我這裡是存到了資料庫,你可以自由選擇儲存方式
                        $pictures = new Pictures; 
                        $picturesId = $pictures->store( $filename , $url );

                        $data = [
                            'key' => $filename,
                            'url' => $url,
                            'id' => $picturesId
                        ];

                        return $this->success( $data );
                    }

                }else{
                    return $this->fail( 30007 );
                }
            }
        } catch (Exception $e) {
            echo $e->getMessage(); 

        }
    }
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結
馬江川@13753441707

相關文章