最近有一個圖片站,無奈之下選擇了對象存儲。
在看了官方文檔後,終於寫出了自己需要的東西,現在做一下總結!
七牛雲的對象存儲如何上傳文件?
首先在項目裏面引入官方提供的SDK文件。
然後PHP引入,直接寫代碼,由於業務的保密性所以我只公開上傳部分的代碼!
<?php
require './vendor/autoload.php';
require('../action/class/common.php');
$file = glob('./up/*.png');
$filename = basename($file[0]);
$locfile = $file[0];
$yunfilenam = 'score/'.$filename;
use Qiniu\Auth;
// 引入上傳類
use Qiniu\Storage\UploadManager;
// 用於簽名的公鑰和私鑰
$accessKey = '';
$secretKey = '';
$bucket = '';
// 初始化籤權對象
$auth = new Auth($accessKey, $secretKey);
// 計算文件大小,生成壓縮率
$filesize = filesize($locfile); // 獲取文件大小,單位爲字節
$targetSize = 100 * 1024;
if ($filesize < 100 * 1024 && $filesize > 80 * 1024) {
$water = 75; // 文件小於100KB,設置$water爲75
} else {
$water = intval(($targetSize / $filesize) * 100);
}
$expires = 3600;
//持久化數據處理的上傳憑證
$saveJpgEntry = \Qiniu\base64_urlSafeEncode($bucket . ":{$yunfilenam}");
$vframeJpgFop = "imageView2/0/format/jpg/q/{$water}|imageslim|saveas/" . $saveJpgEntry;
$policy = array(
'scope' => $bucket . ':' . $filename,
'persistentOps' => $vframeJpgFop,
'insertOnly' => 0,
'persistentPipeline' => "",
);
$token = $auth->uploadToken($bucket, null, $expires, $policy, true);
// print_r($token);die;
// 初始化 UploadManager 對象並進行文件的上傳。
$uploadMgr = new UploadManager();
// 調用 UploadManager 的 putFile 方法進行文件的上傳。
list($ret, $err) = $uploadMgr->putFile($token, $yunfilenam, $locfile, null, 'application/octet-stream', true, null, 'v2');
echo "\n====> putFile result: \n";
if ($err !== null) {
var_dump($err);
} else {
var_dump($ret);
}代碼解讀:
這段代碼是一個PHP腳本,首先引入了兩個類庫文件:autoload.php和common.php,這些類庫文件可能實現了一些基礎功能。然後使用glob()函數選擇了./up/目錄下的所有.png文件,選取其中第一個文件的文件名並保存到變量$filename中。
接下來通過七牛雲的SDK實現了圖片的上傳。首先需要準備好七牛雲的訪問密鑰、空間名等信息,然後初始化Auth對象,生成上傳憑證$token。根據文件大小,設置了壓縮率$water,並將上傳參數封裝到了數組$policy中,包括空間名、文件名、持久化數據處理等。最終調用UploadManager對象的putFile()方法進行文件上傳,並根據返回結果判斷是否上傳成功。如果成功,將文件名插入到MySQL數據庫中,並將文件從./up/目錄移動到./bak/目錄並輸出操作結果。
總之,這段代碼的功能是將./up/目錄下的第一個.png文件上傳到七牛雲空間中並進行壓縮處理,同時將文件名插入到MySQL數據庫中,最終將文件移動到./bak/目錄。
上傳文件的時候如何對圖片進行壓縮?
在上面的代碼中:
$expires = 3600;
//持久化數據處理的上傳憑證
$saveJpgEntry = \Qiniu\base64_urlSafeEncode($bucket . ":{$yunfilenam}");
$vframeJpgFop = "imageView2/0/format/jpg/q/{$water}|imageslim|saveas/" . $saveJpgEntry;
$policy = array(
'scope' => $bucket . ':' . $filename,
'persistentOps' => $vframeJpgFop,
'insertOnly' => 0,
'persistentPipeline' => "",
);這個部分就是對圖片進行處理的部分,壓縮圖片,並且覆蓋圖片。