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 協議》,轉載必須註明作者和本文連結