ThinkPHP5 實現七牛雲圖片上傳功能

  • 背景
    最近在學習大佬的教程時,遇到七牛雲圖片上傳的操作;
    發現若是有後期在線網站的開發需求,可以考慮選取;
    主要是很多網站在使用,可作爲學習的小技能;
    在此做下記錄,方便同樣需求的小夥伴以作參考,同時也是自己的備忘經驗,歡迎指摘 …

七牛雲官方網站
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);

    }
  • 後面就是針對自己的業務邏輯,自行優化代碼了 …
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章