codeigniter檔案上傳類代碼執行個體
檔案上傳類
CodeIgniter 的檔案上傳類允許檔案被上傳。您可以設定指定上傳某類型的檔案及指定大小的檔案。
處理過程
上傳檔案普遍的過程:
一個上傳檔案用的表單,允許使用者選擇一個檔案並上傳它。
當這個表單被提交,該檔案被上傳到指定的目錄。
同時,該檔案將被驗證是否符合您設定的要求。
一旦檔案上傳成功,還要返回一個上傳成功的確認視窗。
這裡有一個簡短的教程來顯示這個過程。此後你將會找到相關的參考資訊。
建立上傳表單
運用文字編輯器建立一個名為upload_form.php的檔案,複製以下代碼並儲存在applications/views/目錄裡:
你會看到這裡運用到了一個表單輔助函數來建立表單的開始標籤,檔案上傳需要一個 multipart form,因為這個表單輔助函數為你建立了一個合適的語句。你還會看到我們運用了一個$error變數,當使用者提交該表單出現錯誤時會顯示相關的出錯資訊。
上傳成功的頁面
運用文字編輯器建立一個名為upload_success.php的檔案。複製以下代碼儲存到applications/views/目錄裡:
Your file was successfully uploaded!
$value):?>
:
控制器
運用文字編輯器,建立一個名為upload.php的控制器.複製以下代碼並儲存到applications/controllers/目錄裡:
load->helper(array('form', 'url')); } function index() { $this->load->view('upload_form', array('error' => ' ' )); } function do_upload() { $config['upload_path'] = './uploads/'; $config['allowed_types'] = 'gif|jpg|png'; $config['max_size'] = '100'; $config['max_width'] = '1024'; $config['max_height'] = '768'; $this->load->library('upload', $config); if ( ! $this->upload->do_upload()) { $error = array('error' => $this->upload->display_errors()); $this->load->view('upload_form', $error); } else { $data = array('upload_data' => $this->upload->data()); $this->load->view('upload_success', $data); } } } ?>
上傳檔案目錄
你還需要一個目標檔案夾來儲存上傳的圖片。在根目錄上建立一個名為uploads的檔案並設定該檔案的屬性為 777。(即可讀寫)
提交表單
要提交你的表單,輸入類似如下的URL:
example.com/index.php/upload/
你將看到一個上傳表單,任選一張(jpg, gif,或者png)圖片進行提交. 如果你在控制器裡設定的路徑是正確的,它將開始工作。
初始設定檔案上傳類
與CodeIgniter的其它一些類相似,檔案上傳類用$this->load->library函數在控制器裡進行初始化:
$this->load->library('upload');
一旦檔案上傳類被載入,對象將通過如下方法來引用:$this->upload
喜好設定
與其它庫類似,你將根據你的喜好設定來控制要被上傳的檔案,在控制器裡,你建立了如下的喜好設定:
$config['upload_path'] = './uploads/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '100';
$config['max_width'] = '1024';
$config['max_height'] = '768';
$this->load->library('upload', $config);
// Alternately you can set preferences by calling the initialize function. Useful if you auto-load the class:
//【如果你在 config檔案夾內的 autoload.php 檔案中自動載入了 upload 類,或者在建構函式內載入了的話,可以調用初始化函數 initialize 來載入設定。————本括弧內由IT不倒翁翻譯,加入了自己的理解】
$this->upload->initialize($config);
以上喜好設定將被完全執行。以下是所有喜好設定參數的描述。
喜好設定參數
以下喜好設定參數是可用的。當你沒有特別指定喜好設定參數時,預設值如下:
喜好設定 預設值 選項 描述
upload_path None None 檔案上傳路徑。該路徑必須是可寫的,相對路徑和絕對路徑均可以。
allowed_types None None 允許上傳檔案的MIME類型;通常副檔名可以做為MIME類型. 允許多個類型用豎線‘|’分開
file_name None 想要使用的檔案名稱
如果設定了這個參數,CodeIgniter 將根據這裡設定的檔案名稱來對上傳的檔案進行重新命名。檔案名稱中的副檔名也必須是允許的檔案類型。
overwrite FALSE TRUE/FALSE (boolean) 是否覆蓋。該參數為TRUE時,如果上傳檔案時碰到重名檔案,將會把原檔案覆蓋;如果該參數為FALSE,上傳檔案重名時,CI將會在新檔案的檔案名稱後面加一個數字。
max_size 0 None 允許上傳檔案大小的最大值(以K為單位)。該參數為0則不限制。注意:通常PHP也有這項限制,可以在php.ini檔案中指定。通常預設為2MB。
max_width 0 None 上傳檔案的寬度最大值(像素為單位)。0為不限制。
max_height 0 None 上傳檔案的高度最大值(像素為單位)。0為不限制。
max_filename 0 None 檔案名稱的最大長度。0為不限制。
encrypt_name FALSE TRUE/FALSE (boolean) 是否重新命名檔案。如果該參數為TRUE,上傳的檔案將被重新命名為隨機的加密字串。當你想讓檔案上傳者也不能區分自己上傳的檔案的檔案名稱時,是非常有用的。當 overwrite 為 FALSE 時,此選項才起作用。
remove_spaces TRUE TRUE/FALSE (boolean) 參數為TRUE時,檔案名稱中的空格將被替換為底線。推薦使用。
在設定檔裡設定喜好設定參數
如果你不願意應用如上方法進行喜好設定,你可以用一個設定檔來取代它。簡單建立一個名為upload.php的檔案,添加 $config數組到該檔案裡,然後儲存檔案到:config/upload.php,它將被自動載入。當你把配置參數儲存到該檔案裡,你不需要用$this->upload->initialize函數進行手動載入。
運用到的函數
以下函數被運用
$this->upload->do_upload()
根據你的偏好配置參數執行操作。注意:預設情況下上傳的檔案來自於提交表單裡名為userfile的檔案域,並且該表單必須是 "multipart"類型:
如果你想在執行do_upload函數之前自訂自己的檔案網域名稱稱,可通過以下方法實現:
$field_name = "some_field_name";
$this->upload->do_upload($field_name)
$this->upload->display_errors()
如果do_upload()返回失敗,顯示錯誤資訊。此函數不會自動輸出,而是返回資料,所以你可以按你的要求安排。
格式化錯誤
上面的函數預設使用
標記錯誤資訊。你可以像這樣設定自己的分隔字元。
$this->upload->display_errors('
', '
');
$this->upload->data()
這是一個輔助函數,它返回你上傳檔案的所有相關資訊的數組。
Array
(
[file_name] => mypic.jpg
[file_type] => image/jpeg
[file_path] => /path/to/your/upload/
[full_path] => /path/to/your/upload/jpg.jpg
[raw_name] => mypic
[orig_name] => mypic.jpg
[client_name] => mypic.jpg
[file_ext] => .jpg
[file_size] => 22.2
[is_image] => 1
[image_width] => 800
[image_height] => 600
[image_type] => jpeg
[image_size_str] => width="800" height="200"
)
解釋
這裡是對上面數組項的解釋。
Item Description
file_name 已上傳的檔案名稱(包括副檔名)
file_type 檔案的Mime類型
file_path 不包括檔案名稱的檔案絕對路徑
full_path 包括檔案名稱在內的檔案絕對路徑
raw_name 不包括副檔名在內的檔案名稱部分
orig_name 上傳的檔案最初的檔案名稱。這隻有在設定上傳檔案重新命名(encrypt_name)時才有效。
client_name 上傳的檔案在用戶端的檔案名稱。
file_ext 副檔名(包括‘.’)
file_size 映像大小,單位是kb
is_image 是否是映像。 1 =是映像。 0 = 不是映像。
image_width 映像寬度.
image_height 映像高度
image_type 檔案類型,即副檔名(不包括‘.’)
image_size_str 一個包含width和height的字串。用於放在一個img標籤裡。