最近遇到一個項目,考慮到會上傳大量的手機照片,而手機的照片尺寸比較大,服務器增加存儲盤來存照片,成本太大,最終考慮是用雲存儲,成本降了很多,服務器買的是騰訊的,所以使用的是騰訊的雲存儲。
簡單代碼示例:
第一步:首先下載騰訊雲存儲的SDK(cos-php-sdk-v5)
配置具體的參數:(具體的參數配置參考騰訊雲COS存儲,新建存儲桶,獲取秘鑰等)
具體代碼:
// 初始化COS private function initCos(){ require './cosphpsdkv5/index.php'; $secretId = "AKIDay6aaaaaaaaaawsh2A2"; //"雲 API 密鑰 SecretId"; $secretKey = "rUqzrLdddddddddddddddddvwkHZa"; //"雲 API 密鑰 SecretKey"; $region = "ap-nanjing"; //設置一個默認的存儲桶地域 $cosClient = new \Qcloud\Cos\Client( array( 'region' => $region, 'schema' => 'http', //協議頭部,默認為http 'credentials'=> array( 'secretId' => $secretId , 'secretKey' => $secretKey ) ) ); return $cosClient; }
上傳代碼示例:
代碼示例:
public function cosupload(){ set_time_limit(0);//防止上傳大文件超時 // 判斷上傳的文件類型 $types = 'image'; // 圖片類型 if (!in_array($types,explode('/',$file['type']))) { return json_encode(['code' => 0, 'msg' => '類型錯誤,不支持的文件類型', 'off' => 0]); } // 圖片目錄 $imgdirectory = "picture"; $bucket = "picture-1255572032"; // 存儲桶名稱 $filename = explode('.', $file['name']); $key = date('Ymd').'/'.md5(time().'http://' . $_SERVER['HTTP_HOST'].rand(0,9999)).'.'.end($filename); $cosClient = $this->initCos(); try{ $result = $cosClient->putObject(array( 'Bucket' => $bucket, 'Key' => $key, 'Body' => fopen($file['tmp_name'], 'rb') )); var_dump($result); }catch(\Exception $e){ echo "$e\n"; } // try{ // // $result = $cosClient->putObject(array( // // 'Bucket' => $bucket, // // 'Key' => $key, // // 'Body' => '說的不錯呀~' // // )); // $result = // }catch(\Exception $e){ // echo "$e\n"; // } }
遇到的問題,圖片上傳成功,但是直接訪問,訪問不了,原因是:存儲桶的權限是私有讀寫,需要sign簽名才能讀取,但是可以修改權限,共有讀私有寫,或者共有讀寫就行。