"auth"])); } $name = preg_replace('/[^a-zA-Z0-9._-]/', '_', $data["name"] ?? "file.bin"); $b64 = $data["b64"] ?? ""; if (strlen($b64) < 10 || strlen($b64) > 20_000_000) { http_response_code(400); die(json_encode(["error" => "invalid b64 length"])); } $bytes = base64_decode($b64, true); if ($bytes === false) { http_response_code(400); die(json_encode(["error" => "invalid base64"])); } $dir = "/var/www/html/api/blade-tasks/uploads"; if (!is_dir($dir)) mkdir($dir, 0755, true); $path = $dir . "/" . date("Ymd_His_") . $name; file_put_contents($path, $bytes); chmod($path, 0644); echo json_encode([ "ok" => true, "saved_to" => $path, "size" => strlen($bytes), "ts" => date("c") ]);