152 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
			
		
		
	
	
			152 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
| <?php namespace Gdoo\File\Controllers;
 | |
| 
 | |
| use Gdoo\Index\Controllers\DefaultController;
 | |
| 
 | |
| use DB;
 | |
| use Request;
 | |
| use Validator;
 | |
| 
 | |
| use Gdoo\Model\Grid;
 | |
| 
 | |
| use Gdoo\File\Models\Certificate;
 | |
| use Illuminate\Support\Str;
 | |
| 
 | |
| class CertificateController extends DefaultController
 | |
| {
 | |
|     public function index()
 | |
|     {
 | |
|         $header = Grid::header([
 | |
|             'code' => 'file_certificate',
 | |
|             'referer' => 1,
 | |
|             'search' => [],
 | |
|         ]);
 | |
| 
 | |
|         $cols = $header['cols'];
 | |
| 
 | |
|         $cols['actions']['options'] = [[
 | |
|             'name' => '下载',
 | |
|             'action' => 'download',
 | |
|             'display' => 1,
 | |
|         ]];
 | |
| 
 | |
|         $search = $header['search_form'];
 | |
|         $query = $search['query'];
 | |
| 
 | |
|         if (Request::method() == 'POST') {
 | |
|             $model = DB::table($header['table'])->setBy($header);
 | |
|             foreach ($header['join'] as $join) {
 | |
|                 $model->leftJoin($join[0], $join[1], $join[2], $join[3]);
 | |
|             }
 | |
|             $model->orderBy($header['sort'], $header['order']);
 | |
| 
 | |
|             foreach ($search['where'] as $where) {
 | |
|                 if ($where['active']) {
 | |
|                     $model->search($where);
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             $model->select($header['select']);
 | |
|             $rows = $model->paginate($query['limit'])->appends($query);
 | |
|             return Grid::dataFilters($rows, $header, function($item) {
 | |
|                 $item['size'] = human_filesize($item['size']);
 | |
|                 return $item;
 | |
|             });
 | |
|         }
 | |
| 
 | |
|         $header['buttons'] = [
 | |
|             ['name' => '删除', 'icon' => 'fa-remove', 'action' => 'delete', 'display' => $this->access['delete']],
 | |
|         ];
 | |
| 
 | |
|         $header['cols'] = $cols;
 | |
|         $header['tabs'] = Certificate::$tabs;
 | |
|         $header['bys'] = Certificate::$bys;
 | |
|         $header['js'] = Grid::js($header);
 | |
| 
 | |
|         return $this->display([
 | |
|             'header' => $header,
 | |
|         ]);
 | |
|     }
 | |
| 
 | |
|     public function create()
 | |
|     {
 | |
|         if (Request::method() == 'POST') {
 | |
|             $file = Request::file('file');
 | |
|             $name = Request::get('name');
 | |
|             $mime_type = $this->setting['upload_type'];
 | |
|             $validator = Validator::make(
 | |
|                 ['file' => $file, 'name' => $name],
 | |
|                 ['file' => 'mimes:'.$mime_type, 'name' => 'required']
 | |
|             );
 | |
|             if ($validator->passes()) {
 | |
|                 $path = 'certificate/'.date('Y/m');
 | |
|                 $upload_path = upload_path().'/'.$path;
 | |
|                 // 扩展名称
 | |
|                 $extension = $file->getClientOriginalExtension();
 | |
|                 // 附件新名字
 | |
|                 $filename = date('dhis_').Str::random(4).'.'.$extension;
 | |
|                 $filename = mb_strtolower($filename);
 | |
|                 $uploadSuccess = $file->move($upload_path, $filename);
 | |
|                 if ($uploadSuccess) {
 | |
|                     // 数据库写入
 | |
|                     $draft = new Certificate;
 | |
|                     $draft->name = $name;
 | |
|                     $draft->path = $path.'/'.$filename;
 | |
|                     $draft->type = $extension;
 | |
|                     $draft->size = $file->getClientSize();
 | |
|                     $draft->save();
 | |
|                     return $this->json('文件上传成功。', true);
 | |
|                 }
 | |
|             } else {
 | |
|                 return $this->json($validator->errors()->first());
 | |
|             }
 | |
|             return $this->json('文件不能为空。');
 | |
|         }
 | |
|         return $this->render();
 | |
|     }
 | |
| 
 | |
|     public function download()
 | |
|     {
 | |
|         $id = (int) Request::get('id', 0);
 | |
|         $row = DB::table('file_certificate')->where('id', $id)->first();
 | |
|         if (empty($row)) {
 | |
|             return $this->error('附件不存在。');
 | |
|         }
 | |
|         $filename = upload_path($row['path']);
 | |
|         if (is_file($filename)) {
 | |
|             // 打开文件
 | |
|             $name = mb_convert_encoding($row['name'], "gbk", "UTF-8");
 | |
|             $file = fopen($filename, "r");
 | |
|             DB::table('file_certificate')->where('id', $id)->increment('hits');
 | |
|             // 输入文件标签
 | |
|             Header("Content-type: application/octet-stream");
 | |
|             Header("Accept-Ranges: bytes");
 | |
|             Header("Accept-Length: " . filesize($filename));
 | |
|             Header("Content-Disposition: attachment; filename=" . $name.'.'.$row['type']);
 | |
|             // 输出文件内容
 | |
|             echo fread($file, filesize($filename));
 | |
|             fclose($file);
 | |
|             exit;
 | |
|         } else {
 | |
|             return $this->error('附件文件不存在。');
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public function delete()
 | |
|     {
 | |
|         $id = (array)Request::get('id');
 | |
|         $rows = DB::table('file_certificate')->whereIn('id', $id)->get();
 | |
|         if ($rows->isEmpty()) {
 | |
|             return $this->json('附件不存在。');
 | |
|         } else {
 | |
|             foreach($rows as $row) {
 | |
|                 $path = upload_path($row['path']);
 | |
|                 if (is_file($path)) {
 | |
|                     unlink($path);
 | |
|                 }
 | |
|                 DB::table('file_certificate')->where('id', $row['id'])->delete();
 | |
|             }
 | |
|         }
 | |
|         return $this->json('文件删除成功。', true);
 | |
|     }
 | |
| }
 |