首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

ThinkPHP 3.2.2 多縮略圖生成實戰:UploadFile 類配置與調用全流程

     編輯:PHP 綜合知識

功能目標

單次上傳圖片,自動生成多張不同尺寸縮略圖(如:大圖 300x150、小圖 100x50)。

核心代碼實現

public function dz_upload() {
    if (isset($_FILES['ori_img'])) {
        $upload = new \Think\UploadFile();
        
        // 基礎配置
        $upload->maxSize = 3000000;
        $upload->savePath = './Public/Uploads/thumb/';
        $upload->allowExts = array('jpg', 'gif', 'png', 'jpeg');
        $upload->saveRule = 'time';
        $upload->uploadReplace = true;
        
        // 縮略圖核心配置
        $upload->thumb = true;
        $upload->thumbMaxWidth = '100,300';   // 多尺寸寬度
        $upload->thumbMaxHeight = '50,150';   // 對應高度
        $upload->thumbPrefix = 'm_,s_';       // 前綴:m_對應第一組、s_對應第二組
        $upload->thumbPath = './Public/Uploads/thumb/' . date('Ymd') . '/';
        $upload->thumbRemoveOrigin = false;   // 保留原圖
        
        // 子目錄配置
        $upload->autoSub = true;
        $upload->subType = 'date';
        $upload->dateFormat = 'Ymd';
        
        if (!$upload->upload()) {
            echo json_encode(['msg' => $upload->getErrorMsg(), 'status' => 0]);
        } else {
            $info = $upload->getUploadFileInfo();
            $savename = $info[0]['savename'];
            
            // 解析路徑構建返回
            $parts = explode('/', $savename);
            $result = $parts[0] . '/_hz' . $parts[1]; // 業務自定義前綴
            
            echo json_encode(['status' => 1, 'msg' => $result]);
        }
    }
}

關鍵配置解析

屬性值說明
thumbMaxWidth'100,300'逗號分隔多組寬度,順序對應 thumbPrefix
thumbMaxHeight'50,150'對應高度,等比縮放以寬高較小者為準
thumbPrefix'm_,s_'多組前綴,下劃線分隔,空前綴表示原圖
thumbRemoveOriginfalsetrue=刪除原圖僅保留縮略圖

生成文件命名規則

原圖: 20240115/5a5b5c5d5e5f.jpg
縮略圖1: 20240115/m_5a5b5c5d5e5f.jpg  (100x50)
縮略圖2: 20240115/s_5a5b5c5d5e5f.jpg  (300x150)

調用方式

$controller = A("Index"); // 實例化 Index 控制器
$controller->dz_upload();

關鍵依賴處理

ThinkPHP 3.2.2 核心包不包含 `UploadFile`、`UploadImage` 類,需:

  1. 下載擴展包
  2. 提取 `ThinkPHP/Extend/Library/Think/UploadFile.class.php`
  3. 放置至 `ThinkPHP/Library/Think/UploadFile.class.php`

常見問題

  • GD 未安裝:`yum install php-gd` / `apt-get install php-gd`
  • 目錄權限:`chmod 755 -R Public/Uploads/`
  • 內存不足:大圖處理需調大 `memory_limit`
  • 路徑錯誤:`savePath`、`thumbPath` 需絕對路徑或相對入口文件正確路徑

擴展建議

  • 增加水印功能:`$upload->waterMark = true;` 配合相關屬性
  • 支援 WebP 輸出:生成後轉換格式
  • 異步處理:上傳入隊列,Worker 處理縮略圖
  • 雲存儲適配:實現自定義驅動上傳至 OSS/COS

掌握 `thumbMaxWidth/Height/Prefix` 三參數聯動,即可靈活實現任意多規格縮略圖自動生成。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved