作者 赵彬吉

file_manage

@@ -5,14 +5,15 @@ namespace App\Http\Controllers\Bside\FileManage; @@ -5,14 +5,15 @@ namespace App\Http\Controllers\Bside\FileManage;
5 5
6 use App\Enums\Common\Code; 6 use App\Enums\Common\Code;
7 use App\Http\Controllers\Bside\BaseController; 7 use App\Http\Controllers\Bside\BaseController;
8 -use App\Models\Nav\BNavGroup; 8 +use App\Models\FileManage\FileManage;
9 use App\Models\Project\Project; 9 use App\Models\Project\Project;
  10 +use App\Services\CosService;
10 use Illuminate\Http\Request; 11 use Illuminate\Http\Request;
11 12
12 /** 13 /**
13 * 文件管理 14 * 文件管理
14 * Class FileManageController 15 * Class FileManageController
15 - * @package App\Http\Controllers\Bside\Nav 16 + * @package App\Http\Controllers\Bside\FileManage
16 * @author zbj 17 * @author zbj
17 * @date 2023/10/9 18 * @date 2023/10/9
18 */ 19 */
@@ -31,36 +32,65 @@ class FileManageController extends BaseController @@ -31,36 +32,65 @@ class FileManageController extends BaseController
31 $this->upload_config = $project['upload_config']; 32 $this->upload_config = $project['upload_config'];
32 } 33 }
33 34
34 - public function index(BNavGroup $nav_group){ 35 + public function index(FileManage $fileManage){
35 $this->map['project_id'] = $this->user['project_id']; 36 $this->map['project_id'] = $this->user['project_id'];
36 - $lists = $nav_group->list($this->map, 'id', ['id', 'name'], 'asc'); 37 + $this->request['name'] && $this->map['name'] = ['like','%'.$this->request['name'].'%'];
  38 + $lists = $fileManage->lists($this->map, $this->page, $this->row);
37 $this->response('success',Code::SUCCESS,$lists); 39 $this->response('success',Code::SUCCESS,$lists);
38 } 40 }
39 41
40 - public function upload(Request $request){ 42 + public function upload(Request $request, FileManage $fileManage){
41 $request->validate([ 43 $request->validate([
42 'file'=>['required'], 44 'file'=>['required'],
43 ],[ 45 ],[
44 'file.required'=>'请上传文件', 46 'file.required'=>'请上传文件',
45 ]); 47 ]);
46 $file = $request->file('file'); 48 $file = $request->file('file');
47 - //todo 上传数量限制  
48 - $count = 0; 49 +
  50 + $data = $this->checkFile($file);
  51 +
  52 + $path = '/file_manage/' . $this->user['project_id'] . '/' . date('Ymd');
  53 + $fileName = uniqid().rand(10000,99999).'.'.$file->getClientOriginalExtension();
  54 +
  55 + $cosService = new CosService();
  56 + $cosService->uploadFile($file,$path,$fileName);
  57 +
  58 + $data['project_id'] = $this->user['project_id'];
  59 + $data['path'] = $path.'/'.$fileName;
  60 +
  61 + $rs = $fileManage->add($data);
  62 + if ($rs === false) {
  63 + $this->fail('上传失败');
  64 + }
  65 + $this->response('success');
  66 + }
  67 +
  68 + protected function checkFile($file){
  69 + $count = FileManage::where('project_id', $this->user['project_id'])->count();
49 if($count >= $this->upload_config['upload_max_num']){ 70 if($count >= $this->upload_config['upload_max_num']){
50 $this->fail('超出最大上传文件数量限制:'. $this->upload_config['upload_max_num']); 71 $this->fail('超出最大上传文件数量限制:'. $this->upload_config['upload_max_num']);
51 } 72 }
  73 + $size = $file->getSize();
52 if($file->getSize()/1024/1024 > $this->upload_config['upload_max_size']){ 74 if($file->getSize()/1024/1024 > $this->upload_config['upload_max_size']){
53 $this->fail('超出最大允许上传文件大小:'. $this->upload_config['upload_max_size'] .'M'); 75 $this->fail('超出最大允许上传文件大小:'. $this->upload_config['upload_max_size'] .'M');
54 } 76 }
55 $extension = $file->getClientOriginalExtension(); 77 $extension = $file->getClientOriginalExtension();
56 if(!in_array($extension, explode(',', $this->upload_config['allow_file_type']))){ 78 if(!in_array($extension, explode(',', $this->upload_config['allow_file_type']))){
57 - $this->fail('不符合允许上传的文件类型:'. $this->upload_config['allow_file_type']); 79 + $this->fail('不允许上传的文件类型');
  80 + }
  81 + $hash = hash_file('md5', $file->getPathname());
  82 + $info = FileManage::where('hash', $hash)->first();
  83 + if($info){
  84 + $this->fail('文件已存在');
58 } 85 }
59 - $original_name = $file->getClientOriginalName();  
60 - $path = '/file_manage/' . sha1($this->user['project_id']) . '/' . $original_name;  
61 - dump($path);exit;  
62 - return $this->single($files);  
63 86
  87 + return [
  88 + 'size' => $size,
  89 + 'extension' => $extension,
  90 + 'hash' => $hash,
  91 + 'name' => $file->getClientOriginalName(),
  92 + 'mime' => $file->getMimeType(),
  93 + ];
64 } 94 }
65 95
66 public function delete(Request $request){ 96 public function delete(Request $request){
@@ -69,14 +99,11 @@ class FileManageController extends BaseController @@ -69,14 +99,11 @@ class FileManageController extends BaseController
69 ],[ 99 ],[
70 'id.required' => 'ID不能为空', 100 'id.required' => 'ID不能为空',
71 ]); 101 ]);
72 - if(in_array($this->param['id'], [BNavGroup::DEFAULT_HEADER_ID,BNavGroup::DEFAULT_FOOTER_ID])){  
73 - $this->fail('系统内置菜单组不能删除');  
74 - }  
75 - $nav_group = BNavGroup::find($this->param['id']);  
76 - if(!$nav_group){ 102 + $fileManage = FileManage::find($this->param['id']);
  103 + if(!$fileManage){
77 $this->response('数据不存在或者已经删除'); 104 $this->response('数据不存在或者已经删除');
78 } 105 }
79 - $nav_group->delete(); 106 + $fileManage->delete();
80 107
81 $this->response('success'); 108 $this->response('success');
82 } 109 }
  1 +<?php
  2 +
  3 +namespace App\Models\FileManage;
  4 +
  5 +use App\Models\Base;
  6 +use Illuminate\Database\Eloquent\SoftDeletes;
  7 +
  8 +/**
  9 + * Class FileManage
  10 + * @package App\Models\FileManage
  11 + * @author zbj
  12 + * @date 2023/10/10
  13 + */
  14 +class FileManage extends Base
  15 +{
  16 +
  17 + protected $table = 'gl_file_manage';
  18 + //连接数据库
  19 + protected $connection = 'custom_mysql';
  20 + use SoftDeletes;
  21 +
  22 + public $hidden = ['deleted_at'];
  23 + public $appends = ['url'];
  24 +
  25 + public function getUrlAttribute($value){
  26 + return getImageUrl($this->path);
  27 + }
  28 +}