89 lines
3.3 KiB
PHP
89 lines
3.3 KiB
PHP
<?php
|
||
|
||
namespace Model;
|
||
|
||
use Think\Model;
|
||
|
||
class FileModel extends Model {
|
||
|
||
public function upload($files, $setting, $driver= 'Local', $config= null,$thumb=false) {
|
||
/* 上传文件 */
|
||
$setting['callback']= array($this, 'isFile');
|
||
$setting['removeTrash']= array($this, 'removeTrash');
|
||
$Upload= new \Think\Upload($setting, $driver, $config);
|
||
$info= $Upload->upload($files);
|
||
|
||
/* 设置文件保存位置 */
|
||
$this->_auto[]= array('location', 'ftp' === strtolower($driver) ? 1 : 0, self::MODEL_INSERT);
|
||
|
||
if ($info) { //文件上传成功,记录文件信息
|
||
foreach ($info as $key => &$value) {
|
||
//关联信息的随机id
|
||
$value['pubid']= I("get.pubid") ? I("get.pubid") : I("post.pubid");
|
||
$value['create_time']= time();
|
||
$value['filepath']= $setting['rootPath'] . $value['savepath'] . $value['savename'];
|
||
$value['filepath']= trim($value['filepath'], ".");
|
||
//是否自动生成小图
|
||
if($thumb){
|
||
//压缩图片
|
||
$image=new \Think\Image();
|
||
$image->open($setting['rootPath'] . $value['savepath'] . $value['savename']);
|
||
$image->thumb(200,200);
|
||
$small_path=$setting['rootPath'] . $value['savepath'] ."small_". $value['savename'];
|
||
$image->save($small_path);
|
||
$value['smallpath']=trim($small_path,".");
|
||
}
|
||
//
|
||
//赋值给info数组,返回给控制器
|
||
$info['smallpath']= $value['smallpath'];
|
||
$info['filepath']= $value['filepath'];
|
||
|
||
//
|
||
/* 已经存在文件记录 */
|
||
if (isset($value['id']) && is_numeric($value['id'])) {
|
||
//更新create_time
|
||
$this->save(array("id" => $value['id'], "create_time" => time(), "pubid" => $value['pubid']));
|
||
|
||
continue;
|
||
} else {
|
||
/* 不存在记录文件信息 */
|
||
if ($this->create($value) && ($id= $this->add())) {
|
||
$value['id'] = $id;
|
||
} else {
|
||
//TODO: 文件上传成功,但是记录文件信息失败,需记录日志
|
||
unset($info[$key]);
|
||
}
|
||
}
|
||
}
|
||
$info['id']= $value['id'];
|
||
return $info; //文件上传成功
|
||
} else {
|
||
$this->error= $Upload->getError();
|
||
return false;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 检测当前上传的文件是否已经存在
|
||
* @param array $file 文件上传数组
|
||
* @return boolean 文件信息, false - 不存在该文件
|
||
*/
|
||
public function isFile($file) {
|
||
if (empty($file['md5'])) {
|
||
throw new \Exception('缺少参数:md5');
|
||
}
|
||
/* 查找文件 */
|
||
$map= array('md5' => $file['md5'], 'sha1' => $file['sha1'],'name' => $file['name'],);
|
||
return $this->field(true)->where($map)->find();
|
||
}
|
||
|
||
/**
|
||
* 清除数据库存在但本地不存在的数据
|
||
* @param $data
|
||
*/
|
||
public function removeTrash($data) {
|
||
$this->where(array('id' => $data['id'],))->delete();
|
||
}
|
||
|
||
}
|