From ad1d96290c8ecab560a58b86992fd8134a22be2c Mon Sep 17 00:00:00 2001 From: root Date: Sat, 11 Jul 2026 15:36:14 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8C=89=20GID=20=E6=9F=A5=E6=89=BE=E7=94=BB?= =?UTF-8?q?=E5=BB=8A=E4=B8=8B=E8=BD=BD=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/lion/MultiThreadedHTTPServer.java | 61 +++++++++++-------- 1 file changed, 34 insertions(+), 27 deletions(-) diff --git a/src/main/java/lion/MultiThreadedHTTPServer.java b/src/main/java/lion/MultiThreadedHTTPServer.java index 1ef84c7..9419e8a 100644 --- a/src/main/java/lion/MultiThreadedHTTPServer.java +++ b/src/main/java/lion/MultiThreadedHTTPServer.java @@ -69,33 +69,18 @@ public class MultiThreadedHTTPServer { } else { String filePath = "/root/gallery/gallery"; - String path = URLDecoder.decode(requestParts[1].split("\\?")[0], StandardCharsets.UTF_8); - if(!path.contains(".")){ - file = new File("/root/abc"); - }else { - String name = path.substring(0, path.lastIndexOf('.')); - name = filePath + name + "/" + name + ".zip"; - file = new File(name); + String gid = paramMap.get("gid"); + file = gid == null ? null : findGalleryZipByGid(new File(filePath), gid); - //该文件不存在 - if(!file.isFile()){ - String gid = paramMap.get("gid"); - - //文件不存在的情况下gid也不存在,直接404 - if(gid == null) - file = new File("/root/abc"); - - //gid存在的情况下尝试查找对应的文件 - else { - File[] galleryDirectories = (new File(filePath)).listFiles(); - - assert galleryDirectories != null; - for (File galleryDirectory : galleryDirectories) - if (galleryDirectory.getName().contains(gid)) { - file = new File(galleryDirectory.getAbsolutePath(), galleryDirectory.getName() + ".zip"); - break; - } - } + //兼容没有gid参数的旧下载链接,再尝试按链接中的文件名查找 + if(file == null){ + String path = URLDecoder.decode(requestParts[1].split("\\?")[0], StandardCharsets.UTF_8); + if(path.contains(".")){ + String name = path.substring(0, path.lastIndexOf('.')); + name = filePath + name + "/" + name + ".zip"; + file = new File(name); + }else{ + file = new File("/root/abc"); } } } @@ -140,6 +125,28 @@ public class MultiThreadedHTTPServer { } } + private static File findGalleryZipByGid(File galleryRoot, String gid){ + File[] galleryDirectories = galleryRoot.listFiles(File::isDirectory); + if(galleryDirectories == null) + return null; + + String marker = "[" + gid; + for(File galleryDirectory : galleryDirectories){ + String name = galleryDirectory.getName(); + int markerIndex = name.lastIndexOf(marker); + if(markerIndex < 0) + continue; + int suffixIndex = markerIndex + marker.length(); + if(suffixIndex >= name.length() || (name.charAt(suffixIndex) != ']' && name.charAt(suffixIndex) != '-')) + continue; + + File zip = new File(galleryDirectory, name + ".zip"); + if(zip.isFile()) + return zip; + } + return null; + } + public static Map parseRequestLine(String requestLine) { Map queryParams = new HashMap<>(); @@ -169,4 +176,4 @@ public class MultiThreadedHTTPServer { } return queryParams; } -} \ No newline at end of file +}