From 84a4698e971d3c66b996bc7bab08016902f12071 Mon Sep 17 00:00:00 2001 From: Wisp X Date: Mon, 17 Jan 2022 13:26:05 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20=E7=BC=A9=E7=95=A5=E5=9B=BE?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=BC=93=E5=AD=98=E6=9C=BA=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/User/ImageController.php | 26 ++++++++++++++----- resources/views/components/upload.blade.php | 16 +++++++++--- 2 files changed, 32 insertions(+), 10 deletions(-) diff --git a/app/Http/Controllers/User/ImageController.php b/app/Http/Controllers/User/ImageController.php index 17f673a8..f9d63bab 100644 --- a/app/Http/Controllers/User/ImageController.php +++ b/app/Http/Controllers/User/ImageController.php @@ -12,6 +12,7 @@ use Illuminate\Database\Eloquent\Builder; use Illuminate\Http\Request; use Illuminate\Http\Response; use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\Cache; use Illuminate\Support\Facades\DB; use Illuminate\View\View; use League\Flysystem\FilesystemException; @@ -105,23 +106,34 @@ class ImageController extends Controller }, headers: ['Content-type' => $image->mimetype]); } - public function thumbnail(Request $request) + public function thumbnail(Request $request): StreamedResponse { /** @var Image $image */ $image = Image::query() ->where('key', $request->route('key')) ->where('extension', $request->route('extension')) ->firstOr(fn() => abort(404)); + try { - $stream = $image->filesystem()->readStream($image->pathname); + $cacheKey = "image_thumb_{$image->key}"; + + if (Cache::has($cacheKey)) { + $contents = Cache::get($cacheKey); + } else { + $stream = $image->filesystem()->readStream($image->pathname); + $img = \Intervention\Image\Facades\Image::make($stream); + $width = (int)($image->width / 2); + $height = (int)($image->height / 2); + $contents = $img->fit($width, $height, fn($constraint) => $constraint->upsize())->encode(); + Cache::rememberForever($cacheKey, fn () => (string)$contents); + } } catch (FilesystemException $e) { abort(404); } - $img = \Intervention\Image\Facades\Image::make($stream); - $width = $image->width; - $height = $image->height; - $img->fit((int)($width / 2), (int)($height / 2), fn($constraint) => $constraint->upsize()); - return $img->response(); + + return \response()->stream(function () use ($contents) { + echo $contents; + }, headers: ['Content-type' => $image->mimetype]); } public function permission(Request $request): Response diff --git a/resources/views/components/upload.blade.php b/resources/views/components/upload.blade.php index 7324ca19..26e6bd54 100644 --- a/resources/views/components/upload.blade.php +++ b/resources/views/components/upload.blade.php @@ -4,10 +4,11 @@

Image Upload

- 最大可上传 1.00 MB 的图片,上传队列最多 @if(Auth::check() && Auth::user()->group) + 最大可上传 {{ \App\Utils::formatSize(Auth::user()->group->configs->get(\App\Enums\GroupConfigKey::MaximumFileSize) * 1024) }} 的图片,上传队列最多 {{ Auth::user()->group->configs->get(\App\Enums\GroupConfigKey::ConcurrentUploadNum) }} @else + 最大可上传 {{ \App\Utils::formatSize(\App\Models\Group::getDefaultConfigs()->get(\App\Enums\GroupConfigKey::MaximumFileSize) * 1024) }} 的图片,上传队列最多 {{ \App\Models\Group::getDefaultConfigs()->get(\App\Enums\GroupConfigKey::ConcurrentUploadNum) }} @endif 张。本站已托管 {{ \App\Models\Image::query()->count() }} 张图片。 @@ -74,6 +75,15 @@ @endpush @push('scripts') + @if(Auth::check() && Auth::user()->group) + + @else + + @endif