From 6db82c817699a0949858535f94107f933b47ea0e Mon Sep 17 00:00:00 2001 From: ganzizi Date: Mon, 20 Nov 2023 11:44:35 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E6=89=93=E5=8C=85?= =?UTF-8?q?=E4=B8=8B=E8=BD=BD=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/Api/FileController.php | 36 +---------- app/Models/File.php | 5 +- app/Tasks/FilePackTask.php | 68 +++++++++++++++++++++ 3 files changed, 72 insertions(+), 37 deletions(-) create mode 100644 app/Tasks/FilePackTask.php diff --git a/app/Http/Controllers/Api/FileController.php b/app/Http/Controllers/Api/FileController.php index 514d31341..15b1ffbda 100755 --- a/app/Http/Controllers/Api/FileController.php +++ b/app/Http/Controllers/Api/FileController.php @@ -2,8 +2,10 @@ namespace App\Http\Controllers\Api; +use Hhxsv5\LaravelS\Swoole\Task\Task; use App\Exceptions\ApiException; use App\Models\AbstractModel; +use App\Tasks\FilePackTask; use App\Models\File; use App\Models\FileContent; use App\Models\FileLink; @@ -1055,39 +1057,7 @@ class FileController extends AbstractController abort(403, "The total size of the file exceeds 1GB. Please download it in batches."); } - $zip = new \ZipArchive(); - $zipName = 'temp/download/' . date("Ym") . '/' . $user->userid . '/' . $downName; - $zipPath = storage_path('app/'.$zipName); - Base::makeDir(dirname($zipPath)); - - if ($zip->open($zipPath, ZipArchive::CREATE | ZipArchive::OVERWRITE) !== true) { - abort(403, "Failed to create compressed file."); - } - - go(function() use ($zip, $files, $downName) { - Coroutine::sleep(0.1); - // 压缩进度 - $progress = 0; - $zip->registerProgressCallback(0.05, function($ratio) use ($downName, &$progress) { - $progress = round($ratio * 100); - File::filePushMsg('compress', [ - 'name'=> $downName, - 'progress' => $progress - ]); - }); - - foreach ($files as $file) { - File::addFileTreeToZip($zip, $file); - } - $zip->close(); - if ($progress < 100) { - File::filePushMsg('compress', [ - 'name'=> $downName, - 'progress' => 100 - ]); - } - }); - + Task::deliver(new FilePackTask($user, $files, $downName)); return Base::retSuccess('success'); } diff --git a/app/Models/File.php b/app/Models/File.php index 7a193549d..cc7b3dad0 100644 --- a/app/Models/File.php +++ b/app/Models/File.php @@ -926,12 +926,10 @@ class File extends AbstractModel */ public static function filePushMsg($action, $data = null, $userid = null) { - // $userid = User::auth()->userid(); if (empty($userid)) { return; } - // $msg = [ 'type' => 'file', 'action' => $action, @@ -941,7 +939,6 @@ class File extends AbstractModel 'userid' => $userid, 'msg' => $msg ]; - $task = new PushTask($params, false); - Task::deliver($task); + Task::deliver(new PushTask($params)); } } diff --git a/app/Tasks/FilePackTask.php b/app/Tasks/FilePackTask.php new file mode 100644 index 000000000..dfe9ae3ca --- /dev/null +++ b/app/Tasks/FilePackTask.php @@ -0,0 +1,68 @@ +user = $user; + $this->files = $files; + $this->downName = $downName; + } + + public function start() + { + + } + + public function end() + { + // 压缩进度 + $progress = 0; + $filePackName = $this->downName; + + $zip = new ZipArchive(); + $zipName = 'temp/download/' . date("Ym") . '/' . $this->user->userid . '/' . $filePackName; + $zipPath = storage_path('app/'.$zipName); + Base::makeDir(dirname($zipPath)); + + if ($zip->open($zipPath, ZipArchive::CREATE | ZipArchive::OVERWRITE) !== true) { + return; + } + + $zip->registerProgressCallback(0.05, function($ratio) use ($filePackName, &$progress) { + $progress = round($ratio * 100); + File::filePushMsg('compress', [ + 'name'=> $filePackName, + 'progress' => $progress + ]); + }); + + foreach ($this->files as $file) { + File::addFileTreeToZip($zip, $file); + } + $zip->close(); + if ($progress < 100) { + File::filePushMsg('compress', [ + 'name'=> $filePackName, + 'progress' => 100 + ]); + } + } +}