CodeIgniter 內建的文件上傳類庫提供了強大且靈活的文件處理機制,支援自定義允許的文件類型、大小限制、尺寸限制以及上傳路徑配置。掌握這個類庫能讓你快速構建安全可靠的文件上傳功能。
enctype="multipart/form-data" 屬性的 HTML 表單<form method="post" action="= base_url() ?>admin/img_upload/" enctype="multipart/form-data">
<div>
<input type="file" name="userfile" size="20" class="button" />
<input type="submit" value=" 上傳 " class="button" />
</div>
</form>
public function img_upload() {
$this->load->helper('url');
$config['upload_path'] = './images/' . date('Ym', time()) . '/';
$config['allowed_types'] = 'gif|jpg|png';
$config['file_name'] = date('Y_m_d', time()) . '_' . sprintf('%02d', rand(0, 99));
$config['max_size'] = '500'; // KB
$config['max_width'] = '1024'; // 像素
$config['max_height'] = '768'; // 像素
$this->load->library('upload', $config);
if ( ! $this->upload->do_upload('userfile')) {
$error = array('error' => $this->upload->display_errors());
// 處理錯誤:$error['error'] 包含錯誤訊息
} else {
$data = array('upload_data' => $this->upload->data());
// 成功:$data['upload_data'] 包含完整檔案資訊
}
}
| 參數 | 預設值 | 說明 |
|---|---|---|
| upload_path | 無 | 上傳目錄路徑,必須可寫入,支援相對/絕對路徑 |
| allowed_types | 無 | 允許的 MIME 類型或副檔名,多個用 | 分隔 |
| file_name | 無 | 強制重命名檔案(含副檔名),副檔名必須在 allowed_types 中 |
| overwrite | FALSE | TRUE 覆蓋同名檔案,FALSE 在檔名後加數字避免衝突 |
| max_size | 0 | 最大檔案大小(KB),0 為不限制(仍受 php.ini 限制) |
| max_width | 0 | 圖片最大寬度(像素),0 不限制 |
| max_height | 0 | 圖片最大高度(像素),0 不限制 |
| max_filename | 0 | 檔名最大長度,0 不限制 |
| encrypt_name | FALSE | TRUE 將檔名加密為隨機字串(overwrite=FALSE 時生效) |
| remove_spaces | TRUE | TRUE 將檔名空格替換為底線 |
userfile,表單必須為 multipart 類型images/202401/),避免單一目錄檔案過多影響效能max_size 並配合 php.ini 的 upload_max_filesize、post_max_sizeencrypt_name 防止惡意檔名攻擊$this->upload->data('file_type')),不要只信任副檔名