- 背景
最近在學習大佬的教程時,遇到七牛雲圖片上傳的操作;
發現若是有後期在線網站的開發需求,可以考慮選取;
主要是很多網站在使用,可作爲學習的小技能;
在此做下記錄,方便同樣需求的小夥伴以作參考,同時也是自己的備忘經驗,歡迎指摘 …
【七牛雲官方網站
】
【PHP SDK 開發文檔
】
> 本人使用的框架爲:ThinkPHP5.0.24
> 其實,可以直接閱讀官方文檔,自行對照開發即可,後面的也只是我們的實際操作而已
▼ 前期準備
①. 開通七牛開發者帳號
②. 如果已有賬號,點擊【祕鑰管理】查看 Access Key 和 Secret Key
③. 到 “對象存儲” 新建一個存儲空間 (公開空間),並記下 名稱
④. 運行 Composer
命令安裝最新穩定版本的 SDK
php composer.phar require qiniu/php-sdk
或: composer require qiniu/php-sdk
▼ 開發步驟
①. 在 application/extra
中新建配置文件 qiniui.php
return [
'ak' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxx',//Access_Key
'sk' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',//Secret_Key
'bucket' => 'mz-7img',//空間名稱
'image_url' => 'xxxxxx.xxx.clouddn.com/',//外鏈域名
];
②. 在目錄 /application/common/lib
下,創建 Upload.php
類,源代碼如下:
<?php
/**
* Created by PhpStorm.
* User: moTzxx
* Date: 2020/4/11
* Time: 12:20
*/
namespace app\common\lib;
// 引入七牛鑑權類
use Qiniu\Auth;
use Qiniu\Config;
use Qiniu\Storage\BucketManager;
use Qiniu\Storage\UploadManager;
/**
* 七牛雲圖片上傳基礎類庫
* Class Upload
* @package app\common\lib
*/
class Upload
{
/**
* 七牛雲圖片上傳操作
* @return bool|string
*/
public static function imageQiNiu(){
// 要上傳文件的臨時文件
$file = $_FILES['file']['tmp_name'];
if (empty($file)){
$message = "您提交的圖片數據不合法";
return false;
}else{
//拿到上傳文件的格式
$pathinfo = pathinfo($_FILES['file']['name']);
//獲取圖片後綴名
$ext = $pathinfo['extension'];
$config = config('qiniu');
//構建一個鑑權對象
$auth = new Auth($config['ak'],$config['sk']);
//生成上傳的token
$token = $auth->uploadToken($config['bucket']);
//上傳到七牛雲後 保存的文件名
$saveFileName = date("YmdHis").substr(md5($file),0,6).rand(0000,9999).".".$ext;
//初始化UploadManager類
$uploadMgr = new UploadManager();
$opRes = $uploadMgr->putFile($token,$saveFileName,$file);
if ($opRes[1] != null){
return false;
}else{
return $saveFileName;
}
}
}
/**
* 七牛雲圖片刪除操作
* @param $delFileName 七牛雲圖片名稱,例:2020041208595410935c8386.jpg
* @return bool
*/
public static function delImgQiNiu($delFileName)
{
// 判斷是否是圖片
$isImage = preg_match('/.*(\.png|\.jpg|\.jpeg|\.gif)$/', $delFileName);
if(!$isImage){
return false;
}else{
//七牛雲賬號配置信息
$conf = config('qiniu');
// 構建鑑權對象
$auth = new Auth($conf['ak'],$conf['sk']);
// 配置
$config = new Config();
// 管理資源
$bucketManager = new BucketManager($auth, $config);
// 刪除文件操作
$opRes = $bucketManager->delete($conf['bucket'], $delFileName);
if (is_null($opRes)) {
// 刪除操作成功
return true;
}else{
return false;
}
}
}
}
③. 圖片上傳控件,點擊操作進行 ajax
請求,則後臺服務端處理邏輯參考如下:
public function uploadQiNiu(Request $request){
$status = 0;
$data = [];
if ($request->Method()== 'POST') {
$image = Upload::imageQiNiu();
if ($image){
$status = 1;
$data['url'] = config('qiniu.image_url').$image;
$message = '上傳成功';
}else{
$message = '上傳失敗';
}
}else{
$message = "參數錯誤";
}
return showMsg($status, $message,$data);
}
- 後面就是針對自己的業務邏輯,自行優化代碼了 …