<?php<web88@qq.com>
namespace app\common\controller;
use app\common\model\File;
use app\common\model\Picture;
class Upload
{
public function upload() {
$uploadType = input('get.filename', 'images', 'trim');
$config = $this->config($uploadType);
$file = request()->file('file');
$info = $file->move($config['rootPath'], true, false);
$return['code'] = 1;
$return['msg'] = $file->getError();
if ($info) {
$return['code'] = 0;
$return['data'] = $this->save($config, $uploadType, $info);
}
return json($return);
}
protected function config($type='images'){
if ($type=='file'){
return $this->attachment();
}else{
return $this->images();
}
}
protected function images() {
return config('upload.picture');
}
protected function attachment() {
return config('upload.attachment');
}
public function ueditor() {
$config = json_decode(preg_replace("/\/\*[\s\S]+?\* $action = input('action','htmlspecialchars') switch($action){
case 'config':
$result = json_encode($config);
break;
case 'uploadimage':
$config_config=config('editor_upload') $fieldName = 'upfile';
$result = $this->uploadImages($fieldName,$config_config);
break;
default:
$result = json_encode(array(
'state'=> 'wrong require'
));
break;
}
if (isset($_GET["callback"])) {
if (preg_match("/^[\w_]+$/", $_GET["callback"])) {
$this->output = htmlspecialchars($_GET["callback"]) . '(' . $result . ')';
} else {
return json_encode(array(
'state'=> 'callback参数不合法'
));
}
} else {
return $result;
}
}
public function uploadImages($fieldName,$config){
$info = $this->uploadFile($fieldName,$config);
if($info['status']){
$data = array(
'state' => "SUCCESS",
'url' => $info['path'],
'title' => $info['name'],
'original' => $info['file']['name'],
'type' => '.' . $info['ext'],
'size' => $info['size'],
);
}else{
$data = array(
"state"=>$info['info'],
);
}
return json_encode($data);
}
public function editor() {
$file = request()->file('upfile');
$info = $file->move(config('editor_upload.rootPath'), true, false);
if ($info) {
$data = $this->parseFile($info);
$data['success'] = true;
$data['file_path'] = $data['url'];
} else {
$data['success'] = false;
$data['msg'] = "error message";
}
return $data;
}
public function umeditor() {
$data=$this->uploadImages('upfile',config('editor_upload'));
return $data;
}
public function delete() {
$data = array(
'status' => 1,
);
echo json_encode($data);exit();
}
/**
* 上传文件并保存信息到数据库
* @param $fieldName 上传表达名称<input type="file" name="upfile" />
* @param $config 配置信息
* @return array
*/
public function uploadFile($fieldName,$config){
$data=['status'=>0,'info'=>''];
$rootPath= $config['rootPath']? $config['rootPath']: './uploads/picture';
$file = request()->file($fieldName);
$dbname = (strpos($file->getMime(),'image')===false) ? 'file':'picture';
$pathname=$file->getPathname();
$datainfo = db($dbname)->where(array('md5' => md5_file($pathname),'sha1'=>sha1_file($pathname)))->find();
if ($datainfo){
$data=array_merge($this->parseFile($file),$datainfo);
return $data;
}
if ($config['mimes']){
}
$info = $file->move($rootPath, true, false);
if ($info){
$file = $this->parseFile($info);
$file['status'] = 1;
$dbname = (strpos($file['mime'],'image')===false) ? 'file':'picture';
$id = db($dbname)->insertGetId($file) if ($id) {
$data=$file;
}
}else{
$data['info']=$file->getError();
}
return $data;
}
public function save($config, $type, $file) {
$file = $this->parseFile($file);
if ($type == 'images'){
$model = new Picture();
}else{
$model = new File();
}
$pk = $model->getPk();
if (isset($file[$pk])){
unset($file[$pk]);
}
$data = $model->allowField(true)->create($file);
if ($data) {
return array_merge($file,$data->toArray());
} else {
return false;
}
}
public function downLocalFile($file, $callback = null, $args = null) {
if (is_file($file['rootpath'] . $file['savepath'] . $file['savename'])) {
is_callable($callback) && call_user_func($callback, $args);
header("Content-Description: File Transfer");
header('Content-type: ' . $file['type']);
header('Content-Length:' . $file['size']);
if (preg_match('/MSIE/', $_SERVER['HTTP_USER_AGENT'])) {
header('Content-Disposition: attachment; filename="' . rawurlencode($file['name']) . '"');
} else {
header('Content-Disposition: attachment; filename="' . $file['name'] . '"');
}
readfile($file['rootpath'] . $file['savepath'] . $file['savename']);
exit;
} else {
$this->error = '文件已被删除!';
return false;
}
}
protected function parseFile($info) {
$data['create_time'] = $info->getATime(); $data['savename'] = $info->getBasename(); $data['c_time'] = $info->getCTime(); $data['ext'] = $info->getExtension(); $data['mime'] = $info->getMime(); $data['name'] = $info->getFilename(); $data['m_time'] = $info->getMTime(); $data['owner'] = $info->getOwner(); $data['savepath'] = $info->getPath(); $data['path'] = str_replace("\\", '/', substr($info->getPathname(), 1)); $data['url'] = ''; $data['src'] = $data['path']; $data['size'] = $info->getSize(); $data['is_file'] = $info->isFile(); $data['is_execut'] = $info->isExecutable(); $data['is_readable'] = $info->isReadable(); $data['is_writable'] = $info->isWritable(); $data['md5'] = md5_file($info->getPathname());
$data['sha1'] = sha1_file($info->getPathname());
$data['getPathname']= $info->getPathname();
return $data;
}
}