diff --git a/src/main/java/com/pt/controller/ResourceController.java b/src/main/java/com/pt/controller/ResourceController.java
index caf2050..8e08e16 100644
--- a/src/main/java/com/pt/controller/ResourceController.java
+++ b/src/main/java/com/pt/controller/ResourceController.java
@@ -1,10 +1,8 @@
 package com.pt.controller;
 
-import com.pt.Item.ResourceInfo;
 import com.pt.constant.Constants;
 import com.pt.entity.Resource;
 import com.pt.entity.User;
-import com.pt.service.DownloadService;
 import com.pt.service.ResourceService;
 import com.pt.service.UserService;
 import com.pt.utils.JWTUtils;
@@ -12,10 +10,11 @@
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.ArrayList;
+import java.io.IOException;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.io.File;
 
 @RestController
 @RequestMapping("/api/resource")
@@ -25,7 +24,6 @@
     @Autowired
     private ResourceService resourceService;
     private UserService userService;
-    private DownloadService downloadService;
 
     @GetMapping("/list/all")
     public ResponseEntity<?> getAllResources(@RequestHeader("token") String token,
@@ -41,27 +39,7 @@
         if (resources.isEmpty()) {
             return ResponseEntity.noContent().build();
         }
-
-        List<ResourceInfo> resourceInfos = new ArrayList<>();
-        for (Resource resource : resources) {
-            ResourceInfo resourceInfo = new ResourceInfo();
-            resourceInfo.setResourceId(resource.getResourceId());
-            resourceInfo.setName(resource.getName());
-            resourceInfo.setSize(resource.getSize());
-            resourceInfo.setDescription(resource.getDescription());
-            resourceInfo.setAuthor(resource.getAuthor());
-            resourceInfo.setPublishTime(resource.getPublishTime());
-
-            int downloadCount = downloadService.searchByResourceId(resource.getResourceId()).size();
-            int seedCount = 0; // TODO: 需要根据tracker信息计算该资源的种子树
-            resourceInfo.setDownloadCount(downloadCount);
-            resourceInfo.setSeedCount(seedCount);
-            resourceInfos.add(resourceInfo);
-        }
-
-        ans.put("message", "Resources retrieved successfully");
-        ans.put("resources", resourceInfos);
-        return ResponseEntity.ok(ans);
+        return ResponseEntity.ok(resources);
     }
 
     @GetMapping("/list/user")
@@ -89,29 +67,30 @@
                                              @RequestParam("description") String description) {
         Map<String, Object> ans = new HashMap<>();
 
-        if(!JWTUtils.checkToken(token, username, Constants.UserRole.USER)){
+        if (!JWTUtils.checkToken(token, username, Constants.UserRole.USER)) {
             ans.put("result", "Invalid token");
             return ResponseEntity.badRequest().body(ans);
         }
 
         User user = userService.findByUsername(username);
-        if(user.getLevel() < 2){
+        if (user == null || user.getLevel() < 2) {
             ans.put("result", "Insufficient permissions to publish resources");
             return ResponseEntity.status(403).body(ans);
         }
 
-        /*
-            * TODO: 在这里实现资源发布的逻辑
-            *  需要将资源同步到Tracker服务器
-            *  种子文件需要保存
-         */
-
-        resourceService.publishResource(name, description, username, size);
+        try {
+            resourceService.publishResource(name, description, username, size);
+        } catch (Exception e) {
+            ans.put("result", "Failed to publish resource: " + e.getMessage());
+            return ResponseEntity.status(500).body(ans);
+        }
 
         ans.put("result", "Resource published successfully");
         return ResponseEntity.ok(ans);
     }
 
+
+
     @GetMapping("/get/{resourceId}")
     public ResponseEntity<?> getResourceById(@PathVariable("resourceId") int resourceId,
                                               @RequestHeader("token") String token,
@@ -133,7 +112,7 @@
     @GetMapping("/download/{resourceId}")
     public ResponseEntity<?> downloadResource(@PathVariable("resourceId") int resourceId,
                                               @RequestHeader("token") String token,
-                                              @RequestParam("username") String username) {
+                                              @RequestParam("username") String username) throws IOException {
 
         Map<String, Object> ans = new HashMap<>();
         if(!JWTUtils.checkToken(token, username, Constants.UserRole.USER)) {
@@ -141,13 +120,16 @@
             return ResponseEntity.badRequest().body(ans);
         }
 
-        /*
-            * TODO: 在这里实现下载资源的方法
-            *       从本地的种子文件目录获取种子文件
-         */
+        Resource resource = resourceService.getResourceById(resourceId);
+        byte[] file = resourceService.getTorrentFileByResource(resource, username);
+        if (file == null) {
+            return ResponseEntity.notFound().build();
+        }
 
-        // Here you would typically return the file or a download link
-        return ResponseEntity.ok(ans);
+        return ResponseEntity.ok()
+                .header("Content-Type", "application/x-bittorrent")
+                .header("Content-Disposition", "attachment; filename=\"" + resource.getName() + ".torrent\"")
+                .body(file);
     }
 
     @GetMapping("/search")
@@ -176,19 +158,19 @@
         Resource resource = resourceService.getResourceById(resourceId);
 
         if(!JWTUtils.checkToken(token, username, Constants.UserRole.ADMIN) || resource == null || !resource.getAuthor().equals(username)) {
-            ans.put("result", "Invalid token");
+            ans.put("result", "Invalid token or insufficient permissions");
             return ResponseEntity.badRequest().body(ans);
         }
 
-        /*
-            * TODO: 在这里实现删除资源的方法
-            *  需要同步到Tracker服务器
-         */
-
-
-        resourceService.deleteResource(resourceId);
+        try {
+            resourceService.deleteResource(resourceId);
+        } catch (Exception e) {
+            ans.put("result", "Failed to delete resource: " + e.getMessage());
+            return ResponseEntity.status(500).body(ans);
+        }
 
         ans.put("result", "Resource deleted successfully");
         return ResponseEntity.ok(ans);
     }
+
 }
