diff --git a/src/main/java/com/g9/g9backend/config/WebConfig.java b/src/main/java/com/g9/g9backend/config/WebConfig.java
new file mode 100644
index 0000000..193c76c
--- /dev/null
+++ b/src/main/java/com/g9/g9backend/config/WebConfig.java
@@ -0,0 +1,34 @@
+package com.g9.g9backend.config;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.CorsRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+/**
+ * WebConfig 类用于配置 Spring MVC 的拦截器和 CORS 设置
+ *
+ * @author Seamher
+ */
+@Configuration
+public class WebConfig implements WebMvcConfigurer {
+
+    private static final Logger logger = LoggerFactory.getLogger(WebConfig.class);
+
+    /**
+     * 配置 CORS 设置
+     *
+     * @param registry CORS 注册表
+     */
+    @Override
+    public void addCorsMappings(CorsRegistry registry) {
+        logger.info("Configuring CORS mappings");
+        registry.addMapping("/**")
+                .allowedOrigins("*")
+                .allowedMethods("GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS")
+                .allowedHeaders("*");
+        logger.info("CORS mappings configured to allow all origins, methods, and headers");
+    }
+
+}
diff --git a/src/main/java/com/g9/g9backend/controller/FileController.java b/src/main/java/com/g9/g9backend/controller/FileController.java
index 7b4e339..313f61e 100644
--- a/src/main/java/com/g9/g9backend/controller/FileController.java
+++ b/src/main/java/com/g9/g9backend/controller/FileController.java
@@ -38,7 +38,7 @@
     @PostMapping
     public ResponseEntity<String> uploadFile(@RequestBody MultipartFile file) {
         // 相对路径（可在资源根路径创建 upload 文件夹）
-        String UPLOAD_DIR = "upload";
+        String UPLOAD_DIR = "D:/nginx/nginx-1.26.2/MCPT";
 
         // 获取原始文件名
         String originalFilename = file.getOriginalFilename();
diff --git a/src/main/java/com/g9/g9backend/controller/ResourceController.java b/src/main/java/com/g9/g9backend/controller/ResourceController.java
index f8d7723..79d9b84 100644
--- a/src/main/java/com/g9/g9backend/controller/ResourceController.java
+++ b/src/main/java/com/g9/g9backend/controller/ResourceController.java
@@ -55,6 +55,14 @@
 
     private final HotTrendService hotTrendService;
 
+    static Map<String, String> GAME_CLASSIFY = new HashMap() {{
+        put("模组", "mod");
+        put("地图", "map");
+        put("整合包", "modPack");
+        put("材质包", "resourcePack");
+    }};
+
+
     public ResourceController(ResourceService resourceService, GameplayService gameplayService, RewardService rewardService, UserUploadService userUploadService, CommunityService communityService, UserService userService, UserPurchaseService userPurchaseService, UserLikeService userLikeService, UserCollectionService userCollectionService, NotificationService notificationService, ResourceVersionService resourceVersionService, SearchHistoryService searchHistoryService, GameVersionService gameVersionService, TorrentRecordService torrentRecordService, HotTrendService hotTrendService) {
         this.resourceService = resourceService;
         this.gameplayService = gameplayService;
@@ -183,6 +191,8 @@
     @PostMapping("like")
     public ResponseEntity<String> likeResource(@RequestBody UserResourceDTO userResourceDTO) {
 
+        logger.info("User id: "+userResourceDTO.getUserId() + "Resource ID: " + userResourceDTO.getResourceId());
+
         QueryWrapper<User> userQuery = new QueryWrapper<>();
         userQuery.eq("user_id", userResourceDTO.getUserId());
         User user = userService.getOne(userQuery);
@@ -331,6 +341,7 @@
         QueryWrapper<Resource> resourceWrapper = new QueryWrapper<>();
         // 搜索名称字段不为空时，根据搜索名称进行模糊匹配，并将该次搜索存到搜索历史表
         if (!Objects.equals(searchValue, "")) {
+            logger.info("Filter by name: " + searchValue);
             resourceWrapper.like("resource_name", searchValue);
             SearchHistory searchHistory = new SearchHistory();
             searchHistory.setSearchContent(searchValue);
@@ -338,13 +349,16 @@
             searchHistoryService.save(searchHistory);
         }
         // 分类字段不为空时，根据类别筛选
-        if (!Objects.equals(classify, "")) {
-            resourceWrapper.eq("classify", classify);
+        logger.info("Classify: " + classify + " Mapped: " + GAME_CLASSIFY.get(classify));
+        if (!Objects.equals(GAME_CLASSIFY.get(classify), "")) {
+            logger.info("Filter by classify: " + classify);
+            resourceWrapper.eq("classify", GAME_CLASSIFY.get(classify));
         }
 
         // 主要玩法列表不为空时，根据主要玩法列表筛选（用户传入一个玩法列表，需要去 gameplay 表中查询该资源的所有玩法列表，只有当用户传入的玩法列表的每个值都在资源实际有的玩法列表中时，该资源才符合条件）
         if (gameplayList.length > 0) {
             // 该子查询统计了用户传入的玩法列表中有多少玩法是在资源的实际玩法列表中有的
+            logger.info("Filter by gameplay: " + Arrays.toString(gameplayList));
             String subQuery = "SELECT COUNT(*) " +
                     "FROM gameplay gp " +
                     "WHERE gp.resource_id = resource.resource_id " +
@@ -357,6 +371,7 @@
         // 游戏版本列表不为空时，根据游戏版本列表筛选
         if (gameVersionList.length > 0) {
             // 拼接游戏版本列表的 IN 子句
+            logger.info("Filter by game version: " + Arrays.toString(gameplayList));
             String gameVersionInClause = String.join(",", Arrays.stream(gameVersionList)
                     .map(v -> "'" + v + "'")
                     .toArray(String[]::new));
@@ -377,6 +392,7 @@
 
         IPage<Resource> resourcePage = resourceService.page(page, resourceWrapper);
         List<Resource> resourceList = resourcePage.getRecords();
+        logger.info("Resource list" + resourceList);
         long total = resourcePage.getTotal();
         long pages = resourcePage.getPages();
         long current = resourcePage.getCurrent();
@@ -468,7 +484,7 @@
     public ResponseEntity<GetResourcePageDTO> getHotResource(@RequestParam String classify, @RequestParam int pageNumber, @RequestParam int rows) {
         IPage<Resource> page = new Page<>(pageNumber, rows);
         QueryWrapper<Resource> resourceQuery = new QueryWrapper<>();
-        resourceQuery.eq("classify", classify);
+        resourceQuery.eq("classify", GAME_CLASSIFY.get(classify));
         // 动态计算热度并按降序排序
         resourceQuery.orderByDesc("(downloads * 0.25 + likes * 0.25 + collections * 0.25 + comments * 0.25)");
         IPage<Resource> resourcePage = resourceService.page(page, resourceQuery);
