From acddde8faa1215b96a22a6d28361bf599af364cf Mon Sep 17 00:00:00 2001 From: kuaifan Date: Wed, 1 Nov 2023 00:13:24 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=89=8B=E6=9C=BA=E4=B8=8B=E8=BD=BD?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E5=90=8D=E5=87=BA=E7=8E=B0html=E7=9A=84?= =?UTF-8?q?=E6=83=85=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/Api/DialogController.php | 14 ++++------ .../Controllers/Api/ProjectController.php | 24 ++++++++-------- app/Models/FileContent.php | 8 ++---- app/Module/Base.php | 28 +++++++++++++++++-- 4 files changed, 44 insertions(+), 30 deletions(-) diff --git a/app/Http/Controllers/Api/DialogController.php b/app/Http/Controllers/Api/DialogController.php index 3b6d5c9a6..c1ab7291a 100755 --- a/app/Http/Controllers/Api/DialogController.php +++ b/app/Http/Controllers/Api/DialogController.php @@ -728,7 +728,7 @@ class DialogController extends AbstractController $text_type = strtolower(trim(Request::input('text_type'))); $silence = in_array(strtolower(trim(Request::input('silence'))), ['yes', 'true', '1']); $markdown = in_array($text_type, ['md', 'markdown']); - // + // $result = []; $dialogIds = $dialog_ids ? explode(',', $dialog_ids) : [$dialog_id ?: 0]; foreach($dialogIds as $dialog_id) { @@ -1161,9 +1161,7 @@ class DialogController extends AbstractController } // $filePath = public_path($array['path']); - return Base::streamDownload(function() use ($filePath) { - echo file_get_contents($filePath); - }, $array['name']); + return Base::streamDownload($filePath, $array['name']); } /** @@ -1576,7 +1574,7 @@ class DialogController extends AbstractController // $dialogUser->color = $color; $dialogUser->save(); - // + // $data = [ 'id' => $dialogId, 'color' => $color @@ -1909,7 +1907,7 @@ class DialogController extends AbstractController $user = User::auth(); // $name = trim(Request::input('name')); - $link_id = intval(Request::input('link_id')); + $link_id = intval(Request::input('link_id')); $userids = Request::input('userids'); // if (empty($name)) { @@ -1944,9 +1942,9 @@ class DialogController extends AbstractController */ public function okr__push() { - User::auth(); + User::auth(); $text = trim(Request::input('text')); - $userid = intval(Request::input('userid')); + $userid = intval(Request::input('userid')); // $botUser = User::botGetOrCreate('okr-alert'); if (empty($botUser)) { diff --git a/app/Http/Controllers/Api/ProjectController.php b/app/Http/Controllers/Api/ProjectController.php index adcdfa0d6..18acbff53 100755 --- a/app/Http/Controllers/Api/ProjectController.php +++ b/app/Http/Controllers/Api/ProjectController.php @@ -910,7 +910,7 @@ class ProjectController extends AbstractController $sorts = Request::input('sorts'); $keys = is_array($keys) ? $keys : []; $sorts = is_array($sorts) ? $sorts : []; - + $builder = ProjectTask::with(['taskUser', 'taskTag']); // if ($keys['name']) { @@ -988,7 +988,7 @@ class ProjectController extends AbstractController $query->orWhere("project_task_users.userid", $userid); $query->orWhere("project_p_task_users.userid", $userid); }); - // 优化子查询汇总 + // 优化子查询汇总 $builder->leftJoinSub(function ($query) { $query->select('task_id', DB::raw('count(*) as file_num')) ->from('project_task_files') @@ -1011,10 +1011,10 @@ class ProjectController extends AbstractController $builder->selectRaw("{$prefix}sub_task.sub_num as _sub_num"); $builder->selectRaw("{$prefix}sub_task.sub_complete as _sub_complete"); $builder->selectRaw(" - CAST(CASE - WHEN {$prefix}project_tasks.complete_at IS NOT NULL THEN 100 - WHEN {$prefix}sub_task.sub_complete = 0 OR {$prefix}sub_task.sub_complete IS NULL THEN 0 - ELSE ({$prefix}sub_task.sub_complete / {$prefix}sub_task.sub_num * 100) + CAST(CASE + WHEN {$prefix}project_tasks.complete_at IS NOT NULL THEN 100 + WHEN {$prefix}sub_task.sub_complete = 0 OR {$prefix}sub_task.sub_complete IS NULL THEN 0 + ELSE ({$prefix}sub_task.sub_complete / {$prefix}sub_task.sub_num * 100) END AS SIGNED) as _percent "); // @@ -1024,7 +1024,7 @@ class ProjectController extends AbstractController $customer->setAppends(["today","overdue"]); return $customer; }); - // + // $data = $list->toArray(); // 还原字段 foreach($data['data'] as &$item){ @@ -1070,7 +1070,7 @@ class ProjectController extends AbstractController $taskid = trim(Request::input('taskid')); $userid = Request::input('userid'); $timerange = Request::input('timerange'); - // + // $list = ProjectTask::with(['taskUser']) ->select('projects.name as project_name', 'project_tasks.id', 'project_tasks.name', 'project_tasks.start_at', 'project_tasks.end_at') ->join('projects','project_tasks.project_id','=','projects.id') @@ -1094,7 +1094,7 @@ class ProjectController extends AbstractController ->distinct() ->orderByDesc('project_tasks.id') ->paginate(Base::getPaginate(200, 100)); - // + // $list->transform(function ($customer) { $customer->setAppends([]); return $customer; @@ -1659,9 +1659,7 @@ class ProjectController extends AbstractController } // $filePath = public_path($file->getRawOriginal('path')); - return Base::streamDownload(function() use ($filePath) { - echo file_get_contents($filePath); - }, $file->name); + return Base::streamDownload($filePath, $file->name); } /** @@ -1786,7 +1784,7 @@ class ProjectController extends AbstractController ]); $data = ProjectTask::oneTask($task->id); $pushUserIds = ProjectTaskUser::whereTaskId($task->id)->pluck('userid')->toArray(); - $pushUserIds[] = ProjectUser::whereProjectId($task->project_id)->whereOwner(1)->value('userid'); + $pushUserIds[] = ProjectUser::whereProjectId($task->project_id)->whereOwner(1)->value('userid'); foreach ($pushUserIds as $userId) { $task->pushMsg('add', $data, $userId); } diff --git a/app/Models/FileContent.php b/app/Models/FileContent.php index 374715d94..352f7cdc5 100644 --- a/app/Models/FileContent.php +++ b/app/Models/FileContent.php @@ -112,9 +112,7 @@ class FileContent extends AbstractModel } else { $filePath = public_path($content['url']); } - return Base::streamDownload(function() use ($filePath) { - echo file_get_contents($filePath); - }, $name); + return Base::streamDownload($filePath, $name); } if (empty($content)) { $content = match ($file->type) { @@ -143,9 +141,7 @@ class FileContent extends AbstractModel if ($download) { $filePath = public_path($path); if (isset($filePath)) { - return Base::streamDownload(function() use ($filePath) { - echo file_get_contents($filePath); - }, $name); + return Base::streamDownload($filePath, $name); } else { abort(403, "This file not support download."); } diff --git a/app/Module/Base.php b/app/Module/Base.php index ad6452558..7a4d3f1cc 100755 --- a/app/Module/Base.php +++ b/app/Module/Base.php @@ -11,6 +11,8 @@ use Redirect; use Request; use Response; use Storage; +use Symfony\Component\HttpFoundation\File\Exception\FileException; +use Symfony\Component\HttpFoundation\File\File; use Validator; class Base @@ -2870,15 +2872,35 @@ class Base /** * 流下载,解决没有后缀无法下载的问题 - * @param $callback + * @param $file * @param $name * @return mixed */ - public static function streamDownload($callback, $name = null) { + public static function streamDownload($file, $name = null) + { + $contentType = 'application/octet-stream'; + if ($file instanceof \Closure) { + $callback = $file; + } else { + if (!$file instanceof File) { + if ($file instanceof \SplFileInfo) { + $file = new File($file->getPathname()); + } else { + $file = new File((string)$file); + } + } + if (!$file->isReadable()) { + throw new FileException('File must be readable.'); + } + $contentType = $file->getMimeType() ?: $contentType; + $callback = $file->getContent(); + } if ($name && !str_contains($name, '.')) { $name .= "."; } - return Response::streamDownload($callback, $name); + return Response::streamDownload($callback, $name, [ + 'Content-Type' => $contentType, + ]); } /**