From 4ec46704b2e4e00cef35f63f4f69708bb0ad03c3 Mon Sep 17 00:00:00 2001 From: "WIN-C27C5MSVTPO\\16961" <1696136552@qq.com> Date: Thu, 15 Jan 2026 19:09:35 +0800 Subject: [PATCH] imagick --- app/common/controller/UploadController.php | 36 ++++++++++++++++++++-- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/app/common/controller/UploadController.php b/app/common/controller/UploadController.php index fa0b998..ab5c0f3 100644 --- a/app/common/controller/UploadController.php +++ b/app/common/controller/UploadController.php @@ -146,11 +146,15 @@ class UploadController mkdir($tmpDir, 0755, true); } - $tmpPath = $tmpDir . '/' . uniqid('img_', true); + // 保留原始文件扩展名 + $originalName = $file->getUploadName(); + $extension = pathinfo($originalName, PATHINFO_EXTENSION); + $tmpFileName = uniqid('img_', true) . ($extension ? '.' . $extension : ''); + $tmpPath = $tmpDir . '/' . $tmpFileName; $file->move($tmpPath); // 压缩处理 - $finalPath = $this->compressImage($tmpPath, $file->getUploadName(), $mime); + $finalPath = $this->compressImage($tmpPath, $originalName, $mime); // $result = Storage::adapter('oss') // ->path(config('oss.oss_main_dir') . $sceneUrl . date('Ymd')) @@ -161,7 +165,8 @@ class UploadController $param = [ 'scene' => $scene, - 'path' => $finalPath + 'path' => $finalPath, + 'original_name' => $originalName ]; $result = (new UploadService())->uploadLocalFile($param); @@ -196,6 +201,19 @@ class UploadController protected function compressImage(string $srcPath, string $originalName, string $mime): string { if (!extension_loaded('imagick')) { + // imagick 未安装时,确保返回的路径有扩展名 + $extension = pathinfo($srcPath, PATHINFO_EXTENSION); + if (!$extension) { + // 如果临时文件没有扩展名,从原始文件名获取 + $originalExtension = pathinfo($originalName, PATHINFO_EXTENSION); + if ($originalExtension) { + $newPath = $srcPath . '.' . $originalExtension; + if (file_exists($srcPath)) { + rename($srcPath, $newPath); + return $newPath; + } + } + } return $srcPath; } @@ -234,6 +252,18 @@ class UploadController return $dstPath; } catch (\Throwable $e) { + // 压缩失败时,确保返回的路径有扩展名 + $extension = pathinfo($srcPath, PATHINFO_EXTENSION); + if (!$extension) { + $originalExtension = pathinfo($originalName, PATHINFO_EXTENSION); + if ($originalExtension) { + $newPath = $srcPath . '.' . $originalExtension; + if (file_exists($srcPath)) { + rename($srcPath, $newPath); + return $newPath; + } + } + } return $srcPath; } }