- FuelPHP 教程
- FuelPHP - 首頁
- FuelPHP - 簡介
- FuelPHP - 安裝
- FuelPHP - 架構概述
- FuelPHP - 簡單 Web 應用程式
- FuelPHP - 配置
- FuelPHP - 控制器
- FuelPHP - 路由
- FuelPHP - 請求 & 響應
- FuelPHP - 檢視
- FuelPHP - 展示器
- FuelPHP - 模型 & 資料庫
- FuelPHP - 表單程式設計
- FuelPHP - 驗證
- 高階表單程式設計
- FuelPHP - 檔案上傳
- FuelPHP - Ajax
- FuelPHP - HMVC 請求
- FuelPHP - 主題
- FuelPHP - 模組
- FuelPHP - 包
- Cookie & 會話管理
- FuelPHP - 事件
- FuelPHP - 郵件管理
- FuelPHP - 效能分析器
- 錯誤處理 & 除錯
- FuelPHP - 單元測試
- 完整工作示例
- FuelPHP 有用資源
- FuelPHP - 快速指南
- FuelPHP - 有用資源
- FuelPHP - 討論
FuelPHP - 檔案上傳
檔案上傳是表單程式設計中最常用的功能之一。FuelPHP 提供了一個特殊的類 **Upload** 來處理檔案上傳。在本節中,我們將學習如何使用 Upload 類上傳檔案。
配置
Upload 類可以透過單獨的配置檔案 **fuel/app/config/upload.php** 進行配置。重要的配置項如下:
**max_size** - 設定要上傳檔案的最大大小。“0” 表示無限上傳大小
**ext_whitelist** - 設定允許的副檔名
**ext_blacklist** - 設定不允許的副檔名
**type_whitelist** - 設定允許的檔案型別。例如,對於 mime 型別“text/plain”,設定為“text”
**type_blacklist** - 設定不允許的檔案型別
**mime_whitelist** - 設定允許的 mime 檔案型別。例如,“text/plain”
**mime_blacklist** - 設定不允許的 mime 檔案型別
**prefix** - 在將上傳的檔案儲存到伺服器時,要新增到檔名之前的字串
**suffix** - 在將上傳的檔案儲存到伺服器時,要新增到檔名之後的字串
**extension** - 要設定的上傳檔案的副檔名
**create_path** - 是否建立檔案路徑,如果不存在
**overwrite** - 是否在儲存上傳的檔案時覆蓋現有檔案
**auto_rename** - 是否透過新增序列號來重新命名檔案,以便儲存上傳的檔案
**randomize** - 是否建立隨機的 32 字元名稱以儲存上傳的檔案
Upload 方法
Upload 類提供用於處理和儲存使用者上傳檔案的選項。每個處理後的檔案(在儲存之前)都將在結果陣列中包含以下資訊。
**field** - 表單欄位的名稱
**name** - 上傳的檔名
**type** - 瀏覽器定義的檔案型別
**mimetype** - Upload 類定義的檔案型別
**file** - 上傳檔案的臨時位置的完全限定名稱
**filename** - 上傳的檔名
**extension** - 上傳檔案的副檔名
**size** - 上傳檔案的以位元組為單位的大小
**errors** - 包含錯誤程式碼和訊息的錯誤陣列
**error** - 是否設定包含上傳失敗原因的錯誤陣列(如果上傳失敗)
一旦檔案儲存在伺服器上,結果陣列也將包含以下資訊。
**saved_to** - 上傳檔案儲存到的完全限定路徑
**saved_as** - 儲存的檔名
**errors** - 更新後的錯誤陣列
現在,讓我們看看 Upload 類的使用方法。
is_valid
如果使用者上傳了任何有效檔案,則 is_valid 返回 true。
// do we have any uploaded files to save?
if (Upload::is_valid()) {
// process
}
get_files
get_files 返回所有上傳的檔案作為多維陣列。如果指定了表單檔案輸入的索引/名稱,則它將僅返回與指定檔案輸入相關的上傳檔案。
foreach(Upload::get_files() as $file) {
// do something with the file info
}
if ( Upload::get_files(0)) {
// do something
}
get_errors
如果上傳一個或多個檔案失敗,則 get_errors 返回一個錯誤陣列。如果指定了表單檔案輸入名稱的索引/名稱,則它將僅返回與指定檔案輸入相關的錯誤。
foreach(Upload::get_errors() as $file) {
// do something with the file info
}
if (Upload::get_errors('myimage')) {
// do something
}
Process
process 指的是收集有關上傳檔案的資訊的實際過程。我們可以使用陣列提供新的自定義配置。如果未指定配置,則它將使用 fuel/app/config/upload.php 中定義的配置。
Upload::process (array( 'auto_rename' => false, 'overwrite' => true ));
save
save 指的是將所有已驗證的檔案儲存到正確位置的實際過程。我們可以指定索引以僅儲存該特定條目。
Upload::save(); Upload::save(0); Upload::save(0, 3);
工作示例
讓我們在我們的員工示例中建立一個新的控制器 Controller_Upload 來測試上傳功能。
**步驟 1** - 建立一個檔案 **fuel/app/classes/controller/upload.php**。建立上傳控制器。
<?php
class Controller_Upload extends Controller {
}
**步驟 2** - 建立一個新的動作 get_upload。
<?php
class Controller_Upload extends Controller {
public function get_index() {
return \View::forge("upload/index");
}
}
**步驟 3** - 為建立的動作建立一個新的檢視。
<!DOCTYPE html>
<html>
<body>
<form action = "/upload/index" method = "post" enctype = "multipart/form-data">
Select image to upload:
<input type = "file" name = "fileToUpload" id = "fileToUpload">
<input type = "submit" value = "Upload Image" name = "submit">
</form>
</body>
</html>
**步驟 4** - 建立一個新的動作 post_action 來處理上傳的檔案。
<?php
class Controller_Upload extends Controller {
public function get_index() {
return \View::forge("upload/index");
}
public function post_index(){
$config = array(
'path' => DOCROOT.'files',
'randomize' => true,
'ext_whitelist' => array('img', 'jpg', 'jpeg', 'gif', 'png'),
);
Upload::process($config);
// if there are any valid files
if (Upload::is_valid()) {
Upload::save();
echo "success";
} else {
// and process any errors
foreach (Upload::get_errors() as $file) {
echo var_dump($file);
}
}
}
}
最後,透過請求 URL **https://:8080/upload/index** 執行應用程式,並嘗試上傳檔案。
結果