/** * 保存记录前要处理的操作 * */ protected function _before_save() { //属性没有值返回 if (is_null($this->_postfile)) { return; } if (!$this->_postfile->isValid()) { throw new QDB_ActiveRecord_ValidateFailedException(array('postfile' => 'postfile is invalid.'), $this); } // 添加图片 $dir = rtrim(Q::ini('appini/teapics/upload_dir'), '/\\') . DS; $date = date('Y-m'); $dest_dir = $dir . $date; Helper_Filesys::mkdirs($dest_dir); $md5 = md5(rand() . '-' . microtime(true)); //上传图片 $img_url = $md5 . '.' . $this->_postfile->extname(); $this->_postfile->move($dest_dir . DS . $img_url); $img_url = "{$date}/{$img_url}"; //生成缩略图 $thumb_name = $md5 . '-thumb.' . '.jpg'; $img = Helper_Image::createFromFile($this->_postfile->filePath(), $this->_postfile->extname()); $width = intval(Q::ini('appini/teapics/thumb_pic_width')); $height = intval(Q::ini('appini/teapics/thumb_pic_width')); $img->crop($width, $height); $fileName = $dest_dir . DS . $thumb_name; $img->saveAsJpeg($fileName); $thumb_name = "{$date}/{$thumb_name}"; //是否数据库有图片 if ($this->thumb_filename && $this->thumb_filename != $thumb_name) { //待删除的图片为数据库的图片 $this->_pending_delete_files['thumb'][] = $this->thumb_filename; } $this->thumb_filename = $thumb_name; if ($this->img_url && $this->img_url != $img_url) { $this->_pending_delete_files['img'][] = $this->img_url; } //赋值到img_url $this->img_url = $img_url; }
/** * 执行上传文件 * * @param QDB_ActiveRecord_Abstract $obj */ function _exec_upload(QDB_ActiveRecord_Abstract $obj) { if (empty($this->_settings['upload_config'])) { return; } $uploader = new Helper_Uploader(); $error = array(); foreach ($this->_settings['upload_config'] as $file_id => $config) { //必需 $post_key = isset($config['post_key']) ? $config['post_key'] : $file_id; if (!$uploader->existsFile($post_key)) { if (isset($config['required']) && $config['required']) { if ($obj->id() && !empty($obj->{$file_id})) { $obj->willChanged($file_id); } else { $error[$post_key]['required'] = $config['errmsgs']['required']; } } continue; } $file = $uploader->file($post_key); $filename = $file->filename(); $extname = $file->extname(); // 验证文件类型 if (isset($config['allowed_filetypes']) && $config['allowed_filetypes']) { if (!$file->isValid($config['allowed_filetypes'])) { $error[$post_key]['allowed_filetypes'] = $config['errmsgs']['allowed_filetypes']; continue; } } else { if ($file->isValid('.php')) { $error[$post_key]['allowed_filetypes'] = "PHP 文件是不允许上传的."; continue; } } //验证文件大小 if (isset($config['max_size']) && $config['max_size'] > 0) { if ($file->filesize() > $config['max_size'] * 1024) { $error[$post_key]['max_size'] = $config['errmsgs']['max_size']; continue; } } // 验证图片尺寸 if (isset($config['image_dimension']) && $config['image_dimension']) { list($width, $height, $type, $attr) = getimagesize($file->filepath()); if (!$width || !$height) { continue; } list($dim_width, $dim_height) = explode('*', $config['image_dimension']); if (isset($dim_width) && $dim_width > 0 && $dim_width != $width || isset($dim_height) && $dim_height > 0 && $dim_height != $height) { $error[$post_key]['image_dimension'] = $config['errmsgs']['image_dimension']; continue; } } $dir = rtrim($config['upload_dir'], '/\\') . DS; $date = date('Y-m'); $dest_dir = $dir . $date; Helper_Filesys::mkdirs($dest_dir); $md5 = md5($filename . '-' . microtime(true)); $_prop_filename = ''; //如果上图片 if (isset($config['is_image']) && $config['is_image'] || isset($config['large']) || isset($config['thumb'])) { $pic_filename = $md5 . '.jpg'; $image = Helper_Image::createFromFile($file->filepath(), $file->extname()); // 生成大图 if (isset($config['large'])) { list($w, $h) = explode('*', $config['large']); $image->crop($w, $h); } $image->saveAsJpeg($dest_dir . DS . $pic_filename); $_prop_filename = "{$date}/{$pic_filename}"; // 生成缩略图 if (isset($config['thumb'])) { $thumb_filename = $md5 . '-thumb.jpg'; list($w, $h) = explode('*', $config['thumb']); $image->crop($w, $h); $image->saveAsJpeg($dest_dir . DS . $thumb_filename); } // 销毁图片资源并删除上传文件 $image->destroy(); $file->unlink(); } else { $file_name = $md5 . '.' . $extname; $file->move($dest_dir . DS . $file_name); $_prop_filename = "{$date}/{$file_name}"; } //如果是更新,删除原有的 if ($obj->id() && !empty($obj->{$file_id})) { $this->_delete_upload_file($obj, $file_id); } //向属性负值 $obj->{$file_id} = $_prop_filename; } if (!empty($error)) { throw new QDB_ActiveRecord_ValidateFailedException($error, $obj); } }