文件上傳類
CodeIgniter 的文件上傳類允許文件被上傳。您可以設(shè)置指定上傳某類型的文件及指定大小的文件。
處理過程
上傳文件普遍的過程:
- 一個上傳文件用的表單,允許用戶選擇一個文件并上傳它。
- 當這個表單被提交,該文件被上傳到指定的目錄。
- 同時,該文件將被驗證是否符合您設(shè)定的要求。
- 一旦文件上傳成功,還要返回一個上傳成功的確認窗口。
這里有一個簡短的教程來顯示這個過程。此后你將會找到相關(guān)的參考信息。
創(chuàng)建上傳表單
運用文本編輯器創(chuàng)建一個名為upload_form.php的文件,復制以下代碼并保存在applications/views/目錄里:
你會看到這里運用到了一個表單輔助函數(shù)來創(chuàng)建表單的開始標簽,文件上傳需要一個 multipart form,因為這個表單輔助函數(shù)為你創(chuàng)建了一個合適的語句。你還會看到我們運用了一個$error變量,當用戶提交該表單出現(xiàn)錯誤時會顯示相關(guān)的出錯信息。
上傳成功的頁面
運用文本編輯器創(chuàng)建一個名為upload_success.php的文件。復制以下代碼保存到applications/views/目錄里:
控制器
運用文本編輯器,創(chuàng)建一個名為upload.php的控制器.復制以下代碼并保存到applications/controllers/目錄里:
上傳文件目錄
你還需要一個目標文件夾來存儲上傳的圖片。在根目錄上創(chuàng)建一個名為uploads的文件并設(shè)置該文件的屬性為 777。(即可讀寫)
提交表單
要提交你的表單,輸入類似如下的URL:
example.com/index.php/upload/
你將看到一個上傳表單,任選一張(jpg, gif,或者png)圖片進行提交. 如果你在控制器里設(shè)置的路徑是正確的,它將開始工作。
?
參考指南
初始化文件上傳類
與CodeIgniter的其它一些類相似,文件上傳類用$this->load->library函數(shù)在控制器里進行初始化:
$this->load->library('upload');
一旦文件上傳類被加載,對象將通過如下方法來引用:$this->upload
偏好設(shè)置
與其它庫類似,你將根據(jù)你的偏好設(shè)置來控制要被上傳的文件,在控制器里,你建立了如下的偏好設(shè)置:
$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文件夾內(nèi)的 autoload.php 文件中自動加載了 upload 類,或者在構(gòu)造函數(shù)內(nèi)加載了的話,可以調(diào)用初始化函數(shù) initialize 來加載設(shè)置?!纠ㄌ杻?nèi)由IT不倒翁翻譯,加入了自己的理解】
$this->upload->initialize($config);
以上偏好設(shè)置將被完全執(zhí)行。以下是所有偏好設(shè)置參數(shù)的描述。
偏好設(shè)置參數(shù)
以下偏好設(shè)置參數(shù)是可用的。當你沒有特別指定偏好設(shè)置參數(shù)時,默認值如下:
偏好設(shè)置 | 默認值 | 選項 | 描述 |
---|---|---|---|
upload_path | None | None | 文件上傳路徑。該路徑必須是可寫的,相對路徑和絕對路徑均可以。 |
allowed_types | None | None | 允許上傳文件的MIME類型;通常文件擴展名可以做為MIME類型. 允許多個類型用豎線‘|’分開 |
file_name | None | 想要使用的文件名 |
如果設(shè)置了這個參數(shù),CodeIgniter 將根據(jù)這里設(shè)置的文件名來對上傳的文件進行重命名。文件名中的擴展名也必須是允許的文件類型。 |
overwrite | FALSE | TRUE/FALSE (boolean) | 是否覆蓋。該參數(shù)為TRUE時,如果上傳文件時碰到重名文件,將會把原文件覆蓋;如果該參數(shù)為FALSE,CI將會在新文件的文件名后面加一個數(shù)字。If set to true, if a file with the same name as the one you are uploading exists, it will be overwritten. If set to false, a number will be appended to the filename if another with the same name exists. |
max_size | 0 | None | 允許上傳文件大小的最大值(以K為單位)。該參數(shù)為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) | 是否重命名文件。如果該參數(shù)為TRUE,上傳的文件將被重命名為隨機的加密字符串。當你想讓文件上傳者也不能區(qū)分自己上傳的文件的文件名時,是非常有用的。當 overwrite 為 FALSE 時,此選項才起作用。 |
remove_spaces | TRUE | TRUE/FALSE (boolean) | 參數(shù)為TRUE時,文件名中的空格將被替換為下劃線。推薦使用。 |
在配置文件里設(shè)置偏好設(shè)置參數(shù)
如果你不愿意應用如上方法進行偏好設(shè)置,你可能用一個配置文件來取代它。簡單創(chuàng)建一個名為upload.php的文件,添加 $config數(shù)組到該文件里,然后保存文件到:config/upload.php,它將被自動加載。當你把配置參數(shù)保存到該文件里,你不需要用$this->upload->initialize函數(shù)進行手動加載。
運用到的函數(shù)
以下函數(shù)被運用
$this->upload->do_upload()
根據(jù)你的偏好配置參數(shù)執(zhí)行操作。注意:默認情況下上傳的文件來自于提交表單里名為userfile的文件域,并且該表單必須是 "multipart"類型:
<form method="post" action="some_action" enctype="multipart/form-data" />
如果你想在執(zhí)行do_upload函數(shù)之前自定義自己的文件域名稱,可通過以下方法實現(xiàn):
$field_name = "some_field_name";
$this->upload->do_upload($field_name)
$this->upload->display_errors()
如果do_upload()返回失敗,顯示錯誤信息。此函數(shù)不會自動輸出,而是返回數(shù)據(jù),所以你可以按你的要求安排。
格式化錯誤
上面的函數(shù)默認使用<p>標記錯誤信息。你可以像這樣設(shè)置自己的分隔符。
$this->upload->display_errors('<p>', '</p>');
$this->upload->data()
這是一個輔助函數(shù),它返回你上傳文件的所有相關(guān)信息的數(shù)組。
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"
)
解釋
這里是對上面數(shù)組項的解釋。
Item | Description |
---|---|
file_name | 已上傳的文件名(包括擴展名) |
file_type | 文件的Mime類型 |
file_path | 不包括文件名的文件絕對路徑 |
full_path | 包括文件名在內(nèi)的文件絕對路徑 |
raw_name | 不包括擴展名在內(nèi)的文件名部分 |
orig_name | 上傳的文件最初的文件名。這只有在設(shè)置上傳文件重命名(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標簽里。 |
?