> 七牛云圖片上傳封裝類
~~~
composer require qiniu/php-sdk
~~~
~~~
<?php
// 本文件放入TP6.0的extend目錄下 extend/Qiniu.php
use Qiniu\Auth;
use Qiniu\Storage\UploadManager;
// 設置配置參數
// Qiniu::setConfig([
// 'bucket' => 'xxxxx',
// 'domain' => 'https://test.itqaq.com',
// 'accessKey' => 'l_OnndRIVj17ZwIKMOZBLorh5dK4xxxxxxx',
// 'secretKey' => '7fXF7wbOWcC5pUJKmGz3N8xxxxxxxxxxxxx',
// ]);
// 執行上傳
// Qiniu::upload('img', 'art/thumb');
// 上傳成功 $arr
// 'result' =>true
// 'msg' => 上傳成功
// 'path' => 帶域名的圖片URL
//
// 上傳失敗 $arr
// 'result' => false
// 'msg' => 錯誤信息
/**
* 七牛云封裝類
* composer require qiniu/php-sdk
*
* @author liang <23426945@qq.com>
* @version 1.0.0
* @datetime 2020-07-20
* @homepage www.itqaq.com
*/
class Qiniu
{
private static $bucket;
private static $domain;
private static $accessKey;
private static $secretKey;
/**
* 私有化構造方法
* 禁止類在外部被實例化
*/
private function __construct(){}
/**
* 設置七牛云配置參數
*/
public static function setConfig($config)
{
// 存儲空間名稱
self::$bucket = $config['bucket'];
// 存儲空間對應的域名
self::$domain = $config['domain'];
// 用于簽名的公鑰 AK
self::$accessKey = $config['accessKey'];
// 用于簽名的私鑰 SK
self::$secretKey = $config['secretKey'];
}
/**
* 文件上傳到七牛云
*/
public static function upload($field, $dirname = '')
{
// 捕獲異常
try {
// 此時可能會報錯
// 比如:上傳的文件過大,超出了配置文件中限制的大小
$file = request()->file($field);
// 如果表單沒有設置文件上傳需要的編碼 $file始終是null
if (is_null($file)) throw new \think\Exception('沒有文件上傳,請檢查當前是否為post請求并且是否設置了編碼: enctype="multipart/form-data"');
} catch (\think\Exception $e) {
// 獲取異常錯誤信息
$errMsg = $e->getMessage();
// 上傳失敗,返回錯誤信息
return self::_rtnData(false, self::_chinese($errMsg));
}
// 臨時文件路徑
$tmpName = $file->getRealPath();
// 原始文件后綴名
$ext = $file->getOriginalExtension();
// 初始化鑒權對象
$auth = new Auth(self::$accessKey, self::$secretKey);
// 生成上傳Token
$token = $auth->uploadToken(self::$bucket);
// 上傳管理類 構建UplaodManager對象
$uploadMgr = new UploadManager();
// 目錄名
if ($dirname != '') $dirname .= '/';
// 隨機文件名
$path = $dirname . md5(microtime(true) . mt_rand(1, 1e9)) . '.' . $ext;
// 執行文件上傳到七牛云
$info = $uploadMgr->putFile($token, $path, $tmpName);
// 上傳到七牛云后的路徑
$qiniuPath = self::$domain . '/' . $info[0]['key'];
// 返回上傳成功的狀態信息
return self::_rtnData(true, '上傳成功', $qiniuPath);
}
/**
* 文件上傳返回結果數組
*/
private static function _rtnData(bool $result, $msg = null, $path = null)
{
// 過濾掉值為null的數組元素
return array_filter(compact('result', 'msg', 'path'), function($v){
return !is_null($v);
});
}
/**
* 英文轉為中文
*/
private static function _chinese($msg)
{
$data = [
// 上傳錯誤信息
'unknown upload error' => '未知上傳錯誤!',
'file write error' => '文件寫入失敗!',
'upload temp dir not found' => '找不到臨時文件夾!',
'no file to uploaded' => '沒有文件被上傳!',
'only the portion of file is uploaded' => '文件只有部分被上傳!',
'upload File size exceeds the maximum value' => '上傳文件大小超過了最大值!',
'upload write error' => '文件上傳保存錯誤!',
];
return $data[$msg] ?? $msg;
}
/**
* 私有化克隆方法
* 禁止類的實例在外部被克隆
*/
private function __clone(){}
}
~~~
- 搭建ThinkPHP6的開發環境
- 配置ThinkPHP6
- 必要的基礎知識(basic)
- MVC開發模式
- 控制器(controller)
- 數據庫(database)
- 模型(model)
- 模型關聯(relation)
- 視圖(view)
- Session
- Cookie
- 緩存(cache)
- 上傳(upload)
- 驗證器(validate)
- 驗證碼(captcha)
- 命令行(command)
- 服務器部署(deploy)
- 數據備份(backup)
- 數據同步(synchronization)
- 訂閱服務(subscribe)
- PHP 易混淆知識點
- 助手函數
- MySQL規范
- Redis 規范
- office插件 phpoffice
- 拼音插件 pinyin
- 日期插件 datetime
- 消息插件 amqp
- 產品部署環境的搭建
- PDF 等雜項處理
- 文件上傳
- 常用擴展
- flc/dysms
- 使用示例 ①
- 使用示例 ②
- qiniu/php-sdk
- 簡介
- 使用示例
- 使用示例 2 ②
- liliuwei/thinkphp-jump
- 擴展介紹
- 下載擴展
- 使用方法
- topthink/think-captcha
- 安裝擴展
- 驗證碼顯示
- 更換驗證碼
- 驗證碼校驗
- 驗證碼配置
- 自定義驗證碼
- phpoffice/phpspreadsheet
- 數據寫入表格
- 讀取表格數據
- topthink/think-queue
- 安裝
- 自定義函數
- 任務類
- 帶有日志的任務類