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標簽裡。