feat: 支持上传及查看高清原图自定义头像
This commit is contained in:
@@ -714,7 +714,7 @@ class ChatController extends Controller
|
||||
public function uploadAvatar(Request $request): JsonResponse
|
||||
{
|
||||
$request->validate([
|
||||
'file' => 'required|image|mimes:jpeg,png,jpg,gif,webp|max:2048',
|
||||
'file' => 'required|image|mimes:jpeg,png,jpg,gif,webp|max:6144',
|
||||
]);
|
||||
|
||||
$user = Auth::user();
|
||||
@@ -726,17 +726,22 @@ class ChatController extends Controller
|
||||
|
||||
try {
|
||||
$manager = new ImageManager(new Driver);
|
||||
$image = $manager->read($file);
|
||||
|
||||
// 裁剪正方形并压缩为 112x112
|
||||
$image->cover(112, 112);
|
||||
|
||||
// 生成相对路径
|
||||
$filename = 'custom_'.$user->id.'_'.time().'.'.$file->extension();
|
||||
$originalFilename = 'custom_'.$user->id.'_'.time().'_original.'.$file->extension();
|
||||
$path = 'avatars/'.$filename;
|
||||
$originalPath = 'avatars/'.$originalFilename;
|
||||
|
||||
// 保存以高质量 JPG 或原格式
|
||||
Storage::disk('public')->put($path, (string) $image->encode());
|
||||
// 1. 处理原图:限制最大宽度为 1280 以免过大,保存原比例高清大图
|
||||
$originalImage = $manager->read($file);
|
||||
$originalImage->scaleDown(width: 1280);
|
||||
Storage::disk('public')->put($originalPath, (string) $originalImage->encode());
|
||||
|
||||
// 2. 处理缩略图:裁剪正方形并压缩为 112x112
|
||||
$thumbImage = $manager->read($file);
|
||||
$thumbImage->cover(112, 112);
|
||||
Storage::disk('public')->put($path, (string) $thumbImage->encode());
|
||||
|
||||
$dbValue = 'storage/'.$path;
|
||||
|
||||
|
||||
@@ -40,6 +40,16 @@ class UserController extends Controller
|
||||
$targetUser = User::where('username', $username)->firstOrFail();
|
||||
$operator = Auth::user();
|
||||
|
||||
// 探测原图
|
||||
$headfaceOriginal = $targetUser->headfaceUrl;
|
||||
if (str_starts_with((string) $targetUser->headface, 'storage/')) {
|
||||
$info = pathinfo($targetUser->headface);
|
||||
$origPath = $info['dirname'].'/'.$info['filename'].'_original.'.($info['extension'] ?? 'jpg');
|
||||
if (\Illuminate\Support\Facades\Storage::disk('public')->exists(substr($origPath, 8))) {
|
||||
$headfaceOriginal = '/'.$origPath;
|
||||
}
|
||||
}
|
||||
|
||||
// 基础公开信息
|
||||
$activePosition = $targetUser->activePosition?->load('position.department')->position;
|
||||
$data = [
|
||||
@@ -48,6 +58,7 @@ class UserController extends Controller
|
||||
1 => '男', 2 => '女', default => ''
|
||||
},
|
||||
'headface' => $targetUser->headface,
|
||||
'headface_original' => $headfaceOriginal,
|
||||
'usersf' => $targetUser->usersf,
|
||||
'user_level' => $targetUser->user_level,
|
||||
'qianming' => $targetUser->qianming,
|
||||
|
||||
Reference in New Issue
Block a user