增加後台圖檔旋轉功能。加強報名地址檢查。修正前台文字。增加前後台報名欄位。設定報名欄位TWID為UNIQUE。修正前台報名可以連續送出的問題。

This commit is contained in:
Eric Li
2025-06-19 12:02:27 +08:00
parent 32b04d09c3
commit 7529061de5
17 changed files with 171 additions and 15 deletions

View File

@ -6,6 +6,8 @@ use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\Response;
use Intervention\Image\Drivers\Gd\Driver;
use Intervention\Image\ImageManager;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
@ -38,4 +40,43 @@ class StorageController extends Controller
'Content-Security-Policy' => "frame-ancestors 'self'", // Allow iframe on same domain
]);
}
public function imageRotation90(Request $request, $file_path)
{
$allowed_directory = 'uploads';
$file_path = str_replace(['../', '..\\'], '', $file_path);
$full_path = storage_path("app/{$allowed_directory}/{$file_path}");
if (is_dir($full_path)) {
throw new NotFoundHttpException('檔案不存在');
}
if (!Storage::disk('local')->exists("{$allowed_directory}/{$file_path}")) {
throw new NotFoundHttpException('檔案不存在');
}
$real_path = realpath($full_path);
$allowed_base_path = realpath(storage_path("app/{$allowed_directory}"));
if (!$real_path || strpos($real_path, $allowed_base_path) !== 0) {
throw new AccessDeniedHttpException('無權訪問該檔案');
}
$mime_type = mime_content_type($full_path) ?: 'application/octet-stream';
$allowedMimeTypes = [
'image/png', // PNG
'image/jpeg', // JPG/JPEG
'image/git' // git
];
if (!in_array($mime_type, $allowedMimeTypes)) {
throw new \Exception('檔案類型錯誤,只接受.jpg/.jpeg/.png/.gif');
}
$manager = new ImageManager(Driver::class);
$image = $manager->read($full_path);
$image = $image->rotate(-90);
$image->save(quality:100);
return [];
}
}