From 31957f2b0e11367eeee9e785f6f57042d3289385 Mon Sep 17 00:00:00 2001 From: augushong Date: Fri, 30 Jun 2023 15:31:58 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=96=87=E4=BB=B6=E5=AD=98?= =?UTF-8?q?=E5=82=A8=E9=97=AE=E9=A2=98=EF=BC=9B=E5=A2=9E=E5=8A=A0=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E4=B8=8A=E4=BC=A0=EF=BC=9B=E4=BF=AE=E5=A4=8D=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .example.env | 2 +- app/UploadFiles.php | 49 +++++++++---------- app/admin/controller/File.php | 32 +++++++----- config/database.php | 2 +- config/upload_type.php | 3 +- ...190728015455_create_table_upload_files.php | 2 +- view/admin/file/index.html | 30 ++++++++++-- 7 files changed, 74 insertions(+), 46 deletions(-) diff --git a/.example.env b/.example.env index 1096619..0109728 100644 --- a/.example.env +++ b/.example.env @@ -11,7 +11,7 @@ DATABASE = test USERNAME = username PASSWORD = password HOSTPORT = 3306 -CHARSET = utf8 +CHARSET = utf8mb4 DEBUG = true [LANG] diff --git a/app/UploadFiles.php b/app/UploadFiles.php index 0ab9152..5e658b5 100644 --- a/app/UploadFiles.php +++ b/app/UploadFiles.php @@ -3,15 +3,14 @@ namespace app; use app\model\UploadFiles as AppUploadFiles; -use League\Flysystem\Util\MimeType; +use League\MimeTypeDetection\FinfoMimeTypeDetector; +use League\MimeTypeDetection\GeneratedExtensionToMimeTypeMap; use think\facade\Filesystem; -use think\facade\Config; use think\File; use think\file\UploadedFile; class UploadFiles { - public static function add() { return new AppUploadFiles(); @@ -26,7 +25,7 @@ class UploadFiles { return AppUploadFiles::where('save_name', $save_name)->update([ 'used_time' => time(), - 'status' => 1 + 'status' => 1, ]); } @@ -34,7 +33,7 @@ class UploadFiles { return AppUploadFiles::where('save_name', $save_name)->update([ 'delete_time' => time(), - 'status' => 2 + 'status' => 2, ]); } @@ -52,7 +51,6 @@ class UploadFiles public static function save(Request $request) { - $type = $request->param('type'); if (empty($type)) { return json_message('缺少类型参数'); @@ -61,12 +59,11 @@ class UploadFiles $file = request()->file('file'); - try { - self::fileScan($file); $model_file = self::saveFile($file, $type, $dir_name); + return json_message($model_file->toArray()); } catch (\Throwable $th) { return json_message($th->getMessage()); @@ -96,7 +93,6 @@ class UploadFiles public static function wangEditorSave(Request $request) { - $type = $request->param('type'); if (empty($type)) { return json_message('缺少类型参数'); @@ -110,18 +106,17 @@ class UploadFiles $saved_files_src = self::saveFile($file, $type, $dir_name)->src; - return json([ - "errno" => 0, - "data" => [ + 'errno' => 0, + 'data' => [ 'url' => $saved_files_src, - ] + ], ]); } + public static function editormdSave(Request $request) { - $type = $request->param('type', 'editormd'); if (empty($type)) { return json_message('缺少类型参数'); @@ -134,23 +129,22 @@ class UploadFiles foreach ($files as $file) { try { - self::fileScan($file); $saved_files_src[] = self::saveFile($file, $type, $dir_name)->src; } catch (\Throwable $th) { return json([ - "success" => 1, - "message" => $th->getMessage(), + 'success' => 1, + 'message' => $th->getMessage(), ]); } } return json([ - "success" => 1, - "message" => "上传成功", - "url" => $saved_files_src + 'success' => 1, + 'message' => '上传成功', + 'url' => $saved_files_src, ]); } @@ -159,10 +153,9 @@ class UploadFiles if (is_null($dir_name)) { $dir_name = $type; } - $model_file = UploadFiles::add(); + $model_file = self::add(); if ($file instanceof UploadedFile) { - $model_file->file_name = $file->getOriginalName(); } else { $model_file->file_name = $file->getFilename(); @@ -179,34 +172,40 @@ class UploadFiles $model_file->save_name = Filesystem::putFile('upload/' . $dir_name, $file, 'uniqid'); $model_file->save(); $model_file->append(['src']); + return $model_file; } public static function saveUrlFile($url, $type) { $file_data = geturl($url); + return json_message(self::saveData($file_data, $type)->toArray()); } public static function saveBase64File($file_data, $type) { - if (strstr($file_data, ",")) { + if (strstr($file_data, ',')) { $file_data = explode(',', $file_data); $file_data = $file_data[1]; } $file_data = base64_decode($file_data); + return json_message(self::saveData($file_data, $type)->toArray()); } public static function saveData($file_data, $type) { - $mime_type = MimeType::detectByContent($file_data); - $ext_name = array_search($mime_type, MimeType::getExtensionToMimeTypeMap()); + $mime_detector = new FinfoMimeTypeDetector(); + + $mime_type = $mime_detector->detectMimeTypeFromBuffer($file_data); + $ext_name = array_search($mime_type, GeneratedExtensionToMimeTypeMap::MIME_TYPES_FOR_EXTENSIONS); $temp_file = tempnam(app()->getRuntimePath(), 'url_save_') . '.' . $ext_name; file_put_contents($temp_file, $file_data); $file = new File($temp_file); $model_file = self::saveFile($file, $type); unlink($temp_file); + return $model_file; } } diff --git a/app/admin/controller/File.php b/app/admin/controller/File.php index e54d335..ec209ff 100644 --- a/app/admin/controller/File.php +++ b/app/admin/controller/File.php @@ -6,6 +6,9 @@ use app\model\TempImg; use app\model\UploadFiles; use app\UploadFiles as AppUploadFiles; use League\Flysystem\Util\MimeType; +use League\MimeTypeDetection\FinfoMimeTypeDetector; +use League\MimeTypeDetection\GeneratedExtensionToMimeTypeMap; +use League\MimeTypeDetection\MimeTypeDetector; use think\facade\App; use think\facade\View; use think\Request; @@ -13,7 +16,7 @@ use think\Request; class File extends Common { /** - * 显示资源列表 + * 显示资源列表. * * @return \think\Response */ @@ -30,8 +33,11 @@ class File extends Common $model_list->where('status', $status); } - $list = $model_list->paginate(); + $list = $model_list->paginate([ + 'query' => $this->request->get(), + ]); View::assign('list', $list); + View::assign('type', $type); return View::fetch(); } @@ -47,7 +53,7 @@ class File extends Common } /** - * 保存新建的资源 + * 保存新建的资源. * * @param \think\Request $request * @return \think\Response @@ -63,6 +69,7 @@ class File extends Common { return AppUploadFiles::editormdSave($request); } + public function wangEditorSave(Request $request) { return AppUploadFiles::wangEditorSave($request); @@ -77,23 +84,23 @@ class File extends Common { return AppUploadFiles::saveBase64File($request->param('data'), $request->param('type')); } + public function tempBase64Save(Request $request) { - $file_data = $request->param('data'); - if (strstr($file_data, ",")) { + if (strstr($file_data, ',')) { $file_data = explode(',', $file_data); $file_data = $file_data[1]; } $file_data = base64_decode($file_data); - $mime_type = MimeType::detectByContent($file_data); - $ext_name = array_search($mime_type, MimeType::getExtensionToMimeTypeMap()); + $mime_detector = new FinfoMimeTypeDetector(); + + $mime_type = $mime_detector->detectMimeTypeFromBuffer($file_data); + $ext_name = array_search($mime_type, GeneratedExtensionToMimeTypeMap::MIME_TYPES_FOR_EXTENSIONS); $public_file_path = '/temp_img/' . uniqid() . '.' . $ext_name; - - $temp_file = App::getRootPath() . 'public' . $public_file_path; $dirname = dirname($temp_file); @@ -105,12 +112,11 @@ class File extends Common file_put_contents($temp_file, $file_data); $model_img = TempImg::create([ - 'path' => $public_file_path + 'path' => $public_file_path, ]); - return json_message([ - 'src' => $public_file_path + 'src' => $public_file_path, ]); } @@ -128,7 +134,7 @@ class File extends Common } return json_message([ - 'delete' => $list_img->count() + 'delete' => $list_img->count(), ]); } diff --git a/config/database.php b/config/database.php index 25a6469..bd0ff0b 100644 --- a/config/database.php +++ b/config/database.php @@ -37,7 +37,7 @@ return [ // 数据库连接参数 'params' => [], // 数据库编码默认采用utf8 - 'charset' => Env::get('database.charset', 'utf8'), + 'charset' => Env::get('database.charset', 'utf8mb4'), // 数据库表前缀 'prefix' => Env::get('database.prefix', 'ul_'), diff --git a/config/upload_type.php b/config/upload_type.php index 87433ae..db42adc 100644 --- a/config/upload_type.php +++ b/config/upload_type.php @@ -4,5 +4,6 @@ return [ 1 => '系统LOGO', 2 => '管理员头像', 3 => '用户头像', - 'editor'=>'富文本图片', + 0=>'富文本图片', + 'attachment'=>'附件', ]; \ No newline at end of file diff --git a/database/migrations/20190728015455_create_table_upload_files.php b/database/migrations/20190728015455_create_table_upload_files.php index c4a1218..171ea27 100644 --- a/database/migrations/20190728015455_create_table_upload_files.php +++ b/database/migrations/20190728015455_create_table_upload_files.php @@ -40,7 +40,7 @@ class CreateTableUploadFiles extends Migrator $table->addColumn('used_time','integer',['limit'=>10,'default'=>0,'comment'=>'标记使用时间,如果为空,可能仅作为了预览图']); $table->addColumn('delete_time','integer',['limit'=>10,'default'=>0,'comment'=>'删除时间']); $table->addColumn('clear_time','integer',['limit'=>10,'default'=>0,'comment'=>'清空时间']); - $table->addColumn('type','integer',['limit'=>2,'default'=>1,'comment'=>'文件类型,1:系统logo;2:管理员头像']); + $table->addColumn('type','string',['limit'=>10,'default'=>1,'comment'=>'文件类型,1:系统logo;2:管理员头像']); $table->addColumn('status','integer',['limit'=>2,'default'=>0,'comment'=>'文件状态:0,上传未使用,1:已使用,2:已删除,3已清除']); $table->addIndex('save_name'); $table->addIndex('create_time'); diff --git a/view/admin/file/index.html b/view/admin/file/index.html index ddeef72..ff0e1fa 100644 --- a/view/admin/file/index.html +++ b/view/admin/file/index.html @@ -50,6 +50,7 @@
+
@@ -77,9 +78,7 @@ {switch $vo.mime_type} {case image/png|image/gif|image/jpeg } - + {/case} {default /} 打开源文件 @@ -133,9 +132,10 @@ {include file="common/_footer"}