guessExtension(),会触发 finfo。 */ trait StoresPublicUploadWithoutFileinfo { protected function storeUploadedFileAsUniqueName(UploadedFile $file, string $directory): string|false { $ext = strtolower($file->getClientOriginalExtension()); $name = Str::uuid()->toString(); if ($ext !== '') { $name .= '.'.$ext; } Storage::disk('public')->makeDirectory($directory); return Storage::disk('public')->putFileAs($directory, $file, $name); } /** 无 fileinfo 时仅用客户端声明的 MIME,避免调用 getMimeType() */ protected function mimeForUploadResponse(UploadedFile $file): string { if (class_exists(\finfo::class)) { try { return $file->getMimeType() ?: $file->getClientMimeType() ?: 'application/octet-stream'; } catch (\Throwable) { // fallthrough } } return $file->getClientMimeType() ?: 'application/octet-stream'; } }