完整業務流程
- 配置上傳路徑(按日期分目錄)與允許類型/大小
- 執行上傳,獲取文件信息
- 載入
image_lib,分別配置大/小縮略圖參數
- 調用
resize() 生成縮略圖
- 入庫記錄原圖路徑、分類、鏈接等信息
核心控制器代碼
public function edit_list_page_banner($category_id = '') {
$category_id = $category_id ?: $_POST['category_id'];
if (isset($_POST['key']) && $_POST['key'] === 'upload') {
// 1. 動態創建日期目錄
$date_dir = date('Y/m/d');
foreach (['source', 'big_thumb', 'small_thumb'] as $dir) {
$path = "./upload/{$dir}/{$date_dir}";
if (!file_exists($path)) mkdir($path, 0777, true);
}
// 2. 上傳配置
$config = [
'upload_path' => "./upload/source/{$date_dir}",
'allowed_types' => 'gif|jpg|png',
'max_size' => 20480,
];
$this->load->library('upload', $config);
if ($this->upload->do_upload('userfile')) {
$data = $this->upload->data();
$this->load->library('image_lib');
// 3. 大縮略圖 (300x300)
$big_cfg = $this->config->item('config_big_thumb');
$big_cfg['source_image'] = $data['full_path'];
$big_cfg['new_image'] = "./upload/big_thumb/{$date_dir}/{$data['file_name']}";
$this->image_lib->initialize($big_cfg);
$this->image_lib->resize();
// 4. 小縮略圖 (100x100)
$small_cfg = [
'image_library' => 'gd2',
'source_image' => $data['full_path'],
'new_image' => "./upload/small_thumb/{$date_dir}/{$data['file_name']}",
'create_thumb' => true,
'maintain_ratio' => true,
'width' => 100, 'height' => 100,
'thumb_marker' => '_100_100',
];
$this->image_lib->initialize($small_cfg);
$this->image_lib->resize();
// 5. 入庫
$this->category_model->add_category_banner([
'category_id' => $category_id,
'pic_url' => "./upload/source/{$date_dir}/{$data['file_name']}",
'addtime' => time(),
'gender' => $_POST['gender'],
'link_url' => $_POST['link_url'],
'user_id' => $this->cur_user['user_id'],
]);
}
}
// 列表渲染...
}
配置文件 config.php 中的縮略圖預設
$config['config_big_thumb'] = [
'image_library' => 'gd2',
'create_thumb' => true,
'maintain_ratio' => true,
'width' => 300, 'height' => 300,
'thumb_marker' => '_300_300',
];
關鍵點提示
initialize() 必須在每次 resize() 前調用以重置配置
maintain_ratio = true 保持原圖比例,寬高為最大限制
- 目錄權限 0777 確保寫入成功,生產環境建議收緊