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