patw 的筆記、生活、隨筆
[CodeIgniter] 多檔上傳圖片並縮圖
用 CodeIgniter 做多檔上傳圖片,並希望同時縮圖(一大一小),並新增至資料表中。
在官方討論區參考了一些寫法 .. 有空再把它優化一下,先記著寫法。
View 的表單,除了 form 記得用 enctype="multipart/form-data" 外,檔案上傳的 code 可以這樣下:
<input type="file" name="userfile1" /><br />
<input type="file" name="userfile2" /><br />
<input type="file" name="userfile3" /><br />
<input type="file" name="userfile4" /><br />
<input type="file" name="userfile5" /><br />
下面這段依需求放置在 Controller 裡:
$config['upload_path'] = './uploads/';
$config['allowed_types'] = 'jpg|jpeg|gif|png';
$config['overwrite'] = false;
$config['encrypt_name'] = TRUE;
$this->load->library('upload',$config);
$this->upload->initialize($config);
foreach($_FILES as $key => $value)
{
if( !empty($value['name']))
{
if ( ! $this->upload->do_upload($key))
{
$data["error"] = $this->upload->display_errors();
$this->load->model('Photo_model');
$data["photo"] = $this->Photo_model->getPhotoList();
$this->template->write_view('content','photoAdd',$data);
$this->template->render();
} else {
$fInfo = $this->upload->data();
$this->_createThumbnail($fInfo['full_path'],FALSE,"",330,480);
$this->_createThumbnail($fInfo['full_path'],TRUE,"_tn",110,160);
$this->validation->set_error_delimiters('','<br />');
$rules['status'] = "required|integer|max_length[1]";
$this->validation->set_rules($rules);
$fields['status'] = "Status";
$this->validation->set_fields($fields);
if($this->validation->run() == FALSE)
{
$this->photoAdd();
}
else
{
$this->load->model('Photo_model');
$this->Photo_model->savePhoto("add");
}
}
}
}
裡面有用到一個縮圖 function:
function _createThumbnail($fileName, $isThumb, $thumbMarker="", $width, $height) {
//settings
$config['image_library'] = 'gd2';
$config['source_image'] = $fileName;
$config['create_thumb'] = $isThumb;
$config['maintain_ratio'] = TRUE;
$config['master_dim'] = 'width';
if(isset($thumbMarker) && $thumbMarker!=""){
$config['thumb_marker'] = $thumbMarker;
}
$config['width'] = $width;
$config['height'] = $height;
$this->load->library('image_lib', $config);
$this->image_lib->clear();
$this->image_lib->initialize($config);
if(!$this->image_lib->resize()) echo $this->image_lib->display_errors();
}
對了 … 因為上傳送出之後也會將紀錄新增至資料表中,所以 Model 取得上傳處理過的檔名可以這樣做:
$thumb_img = substr($this->upload->file_name, 0, -4)."_tn".$this->upload->file_ext; $large_img = substr($this->upload->file_name, 0, -4).$this->upload->file_ext;
| Print article | This entry was posted by patw on 2010年八月18日 at 3:02 下午, and is filed under Code Igniter. Follow any responses to this post through RSS 2.0. You can leave a response or trackback from your own site. |