From 2806c7c20495e6b31c2bb6c78b13790f159f10cc Mon Sep 17 00:00:00 2001 From: augushong Date: Fri, 4 Mar 2022 19:37:59 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E5=9B=BE=E7=89=87=E4=B8=8A?= =?UTF-8?q?=E4=BC=A0;?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/UploadFiles.php | 266 +++++++++++++++++++++--------- app/admin/controller/File.php | 146 +++++++--------- view/admin/post/edit_content.html | 4 + 3 files changed, 255 insertions(+), 161 deletions(-) diff --git a/app/UploadFiles.php b/app/UploadFiles.php index 7e362db..0ab9152 100644 --- a/app/UploadFiles.php +++ b/app/UploadFiles.php @@ -3,94 +3,210 @@ namespace app; use app\model\UploadFiles as AppUploadFiles; +use League\Flysystem\Util\MimeType; use think\facade\Filesystem; use think\facade\Config; +use think\File; +use think\file\UploadedFile; class UploadFiles { - public static function add() - { - return new AppUploadFiles(); - } - - public static function create($data, $allowFiled = [], $replace = false) - { - return AppUploadFiles::create($data, $allowFiled, $replace); - } - - public static function use($save_name) - { - return AppUploadFiles::where('save_name', $save_name)->update([ - 'used_time' => time(), - 'status' => 1 - ]); - } - - public static function delete($save_name) - { - return AppUploadFiles::where('save_name', $save_name)->update([ - 'delete_time' => time(), - 'status' => 2 - ]); - } - - public static function clear($id) - { - $model_file = AppUploadFiles::withTrashed()->find($id); - - $model_file->clear_time = time(); - $model_file->status = 3; - - $model_file->save(); - - return Filesystem::delete($model_file->getData('save_name')); - } - - public static function save(Request $request) - { - - $type = $request->param('type'); - if (empty($type)) { - return json_message('缺少类型参数'); + public static function add() + { + return new AppUploadFiles(); } - $file = request()->file('file'); - - $file_extension = $file->extension(); - - if ($file_extension == 'php') { - return json_message('上传文件异常'); + public static function create($data, $allowFiled = [], $replace = false) + { + return AppUploadFiles::create($data, $allowFiled, $replace); } - $file_path = $file->getRealPath(); - - $file_content = file_get_contents($file_path); - - if (strpos($file_content, 'update([ + 'used_time' => time(), + 'status' => 1 + ]); } - if (empty($file)) { - return json_message('上传失败'); + public static function delete($save_name) + { + return AppUploadFiles::where('save_name', $save_name)->update([ + 'delete_time' => time(), + 'status' => 2 + ]); } - $dir_name = $request->param('dir', 'data'); - $model_file = UploadFiles::add(); - $model_file->file_name = $file->getOriginalName(); - $model_file->mime_type = $file->getOriginalMime(); - $model_file->ext_name = $file->extension(); - $model_file->file_size = $file->getSize(); - $model_file->file_md5 = $file->md5(); - $model_file->file_sha1 = $file->sha1(); - $model_file->create_time = time(); - $model_file->type = $type; - try { - $model_file->save_name = Filesystem::putFile('upload/' . $dir_name, $file, 'uniqid'); - $model_file->save(); - return json_message($model_file->append(['src'])->toArray()); - } catch (\Throwable $th) { - return json_message($th->getMessage()); + public static function clear($id) + { + $model_file = AppUploadFiles::withTrashed()->find($id); + + $model_file->clear_time = time(); + $model_file->status = 3; + + $model_file->save(); + + return Filesystem::delete($model_file->getData('save_name')); + } + + public static function save(Request $request) + { + + $type = $request->param('type'); + if (empty($type)) { + return json_message('缺少类型参数'); + } + $dir_name = $request->param('dir', $type); + + $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()); + } + } + + public static function fileScan($file) + { + $file_extension = $file->extension(); + + if ($file_extension == 'php') { + throw new \Exception('上传文件异常'); + } + + $file_path = $file->getRealPath(); + + $file_content = file_get_contents($file_path); + + if (strpos($file_content, 'param('type'); + if (empty($type)) { + return json_message('缺少类型参数'); + } + $dir_name = $request->param('dir', $type); + + $file = $request->file('file'); + + $saved_files_src = ''; + self::fileScan($file); + + $saved_files_src = self::saveFile($file, $type, $dir_name)->src; + + + return json([ + "errno" => 0, + "data" => [ + 'url' => $saved_files_src, + + ] + ]); + } + public static function editormdSave(Request $request) + { + + $type = $request->param('type', 'editormd'); + if (empty($type)) { + return json_message('缺少类型参数'); + } + $dir_name = $request->param('dir', $type); + + $files = $request->file(); + + $saved_files_src = []; + + 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(), + + ]); + } + } + + return json([ + "success" => 1, + "message" => "上传成功", + "url" => $saved_files_src + ]); + } + + public static function saveFile($file, $type, $dir_name = null) + { + if (is_null($dir_name)) { + $dir_name = $type; + } + $model_file = UploadFiles::add(); + + if ($file instanceof UploadedFile) { + + $model_file->file_name = $file->getOriginalName(); + } else { + $model_file->file_name = $file->getFilename(); + } + + $model_file->mime_type = $file->getMime(); + $model_file->ext_name = $file->extension(); + $model_file->file_size = $file->getSize(); + $model_file->file_md5 = $file->md5(); + $model_file->file_sha1 = $file->sha1(); + $model_file->create_time = time(); + $model_file->type = $type; + + $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, ",")) { + $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()); + $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 f43c534..0283e02 100644 --- a/app/admin/controller/File.php +++ b/app/admin/controller/File.php @@ -9,102 +9,76 @@ use think\Request; class File extends Common { - /** - * 显示资源列表 - * - * @return \think\Response - */ - public function index() - { - // + /** + * 显示资源列表 + * + * @return \think\Response + */ + public function index() + { + // - $type = $this->request->param('type', 1); - $status = $this->request->param('status', ''); + $type = $this->request->param('type', 1); + $status = $this->request->param('status', ''); - $model_list = UploadFiles::withTrashed()->where('type', $type)->order('id desc'); + $model_list = UploadFiles::withTrashed()->where('type', $type)->order('id desc'); - if ($status != '') { - $model_list->where('status', $status); + if ($status != '') { + $model_list->where('status', $status); + } + + $list = $model_list->paginate(); + View::assign('list', $list); + + return View::fetch(); } - $list = $model_list->paginate(); - View::assign('list', $list); + /** + * 显示创建资源表单页. + * + * @return \think\Response + */ + public function create() + { + // + } - return View::fetch(); - } + /** + * 保存新建的资源 + * + * @param \think\Request $request + * @return \think\Response + */ + public function save(Request $request) + { + // - /** - * 显示创建资源表单页. - * - * @return \think\Response - */ - public function create() - { - // - } + return AppUploadFiles::save($request); + } - /** - * 保存新建的资源 - * - * @param \think\Request $request - * @return \think\Response - */ - public function save(Request $request) - { - // + public function editormdSave(Request $request) + { + return AppUploadFiles::editormdSave($request); + } + public function wangEditorSave(Request $request) + { + return AppUploadFiles::wangEditorSave($request); + } - return AppUploadFiles::save($request); - } + public function urlSave(Request $request) + { + return AppUploadFiles::saveUrlFile($request->param('url'), $request->param('type')); + } - /** - * 显示指定的资源 - * - * @param int $id - * @return \think\Response - */ - public function read($id) - { - // - } + public function base64Save(Request $request) + { + return AppUploadFiles::saveBase64File($request->param('data'), $request->param('type')); + } - /** - * 显示编辑资源表单页. - * - * @param int $id - * @return \think\Response - */ - public function edit($id) - { - // - } + public function clear($id) + { + AppUploadFiles::clear($id); - /** - * 保存更新的资源 - * - * @param \think\Request $request - * @param int $id - * @return \think\Response - */ - public function update(Request $request, $id) - { - // - } - - /** - * 删除指定资源 - * - * @param int $id - * @return \think\Response - */ - public function delete($id) - { - // - } - - public function clear($id) - { - AppUploadFiles::clear($id); - - return json_message(); - } + return json_message(); + } } diff --git a/view/admin/post/edit_content.html b/view/admin/post/edit_content.html index ce3402f..fcda8a2 100644 --- a/view/admin/post/edit_content.html +++ b/view/admin/post/edit_content.html @@ -146,7 +146,11 @@ editorConfig.placeholder = '请输入内容' editorConfig.scroll = false // 禁止编辑器滚动 editorConfig.MENU_CONF['uploadImage'] = { + server: '{:url("File/wangEditorSave")}', fieldName: 'file', + meta: { + type: 'editor' + } } editorConfig.onChange = (editor) => { console.log('content', editor)