在ThinkPHP提供的官方实例中有一个上传图像类的代码非常好,在这里我给分析下,如何的使用。
实例代码如下:
<?php
class IndexAction extends Action {
public function index() {
$Photo = M(\'Photo\');
$list = $Photo->order(\'create_time desc\')->limit(2)->findAll();
$this->assign(\'list\', $list);
$this->display();
}
public function upload() {
if (!empty($_FILES)) {
//如果有文件上传 上传附件
$this->_upload();
//$this->forward();
}
}
// 文件上传
protected function _upload() {
import("@.ORG.UploadFile");
$upload = new UploadFile();
//设置上传文件大小
$upload->maxSize = 3292200;
//设置上传文件类型
$upload->allowExts = explode(\',\', \'jpg,gif,png,jpeg\');
//设置附件上传目录
$upload->savePath = \'/tp/Examples/File/Tpl/default/Public/Uploads/\';
//设置需要生成缩略图,仅对图像文件有效
$upload->thumb = true;
// 设置引用图片类库包路径
$upload->imageClassPath = \'@.ORG.Image\';
//设置需要生成缩略图的文件后缀
$upload->thumbPrefix = \'m_,s_\'; //生产2张缩略图
//设置缩略图最大宽度
$upload->thumbMaxWidth = \'400,100\';
//设置缩略图最大高度
$upload->thumbMaxHeight = \'400,100\';
//设置上传文件规则
$upload->saveRule = uniqid;
//删除原图
$upload->thumbRemoveOrigin = true;
if (!$upload->upload()) {
//捕获上传异常
$this->error($upload->getErrorMsg());
} else {
//取得成功上传的文件信息
$uploadList = $upload->getUploadFileInfo();
import("@.ORG.Image");
//给m_缩略图添加水印, Image::water(\'原文件名\',\'水印图片地址\')
Image::water($uploadList[0][\'savepath\'].\'m_\'.$uploadList[0][\'savename\'], \'/tp/Examples/File/Tpl/default/Public/Images/logo2.png\');
$_POST[\'image\'] = $uploadList[0][\'savename\'];
}
$model = M(\'Photo\');
//保存当前数据对象
$data[\'image\'] = $_POST[\'image\'];
$data[\'create_time\'] = time();
$list = $model->add($data);
if ($list !== false) {
$this->success(\'上传图片成功!\');
} else {
$this->error(\'上传图片失败!\');
}
}
}
?>