添加API接口,修改DB1文件
Change-Id: I5a493962f5a8b0c60e6944a7d630263789d3b4ee
diff --git a/src/main/java/api/ApiApplication.java b/src/main/java/api/ApiApplication.java
index 93eb640..6d65a81 100644
--- a/src/main/java/api/ApiApplication.java
+++ b/src/main/java/api/ApiApplication.java
@@ -8,4 +8,18 @@
public static void main(String[] args) {
SpringApplication.run(ApiApplication.class, args);
}
+
+ // @Bean
+ // public WebMvcConfigurer corsConfigurer() {
+ // return new WebMvcConfigurer() {
+ // @Override
+ // public void addCorsMappings(CorsRegistry registry) {
+ // registry.addMapping("/**")
+ // .allowedOrigins("*")
+ // .allowedMethods("*")
+ // .allowedHeaders("*")
+ // .exposedHeaders(HttpHeaders.CONTENT_DISPOSITION);
+ // }
+ // };
+ // }
}
\ No newline at end of file
diff --git a/src/main/java/api/ApiController.java b/src/main/java/api/ApiController.java
index a683b0e..d8528db 100644
--- a/src/main/java/api/ApiController.java
+++ b/src/main/java/api/ApiController.java
@@ -2,25 +2,41 @@
import java.io.File;
+import javax.annotation.PostConstruct;
+
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;
import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.bind.annotation.CrossOrigin;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
import database.Database1;
import entity.Seed;
import tracker.Tracker;
+
@RestController
public class ApiController implements ApiInterface {
- private static Database1 db;
-
+ private static Database1 db1;
private static Tracker tracker;
+ private static ObjectMapper mapper;
+
+ @PostConstruct
+ public void init() {
+ db1 = new Database1();
+ tracker = new Tracker();
+ mapper = new ObjectMapper();
+ mapper.configure(com.fasterxml.jackson.databind.SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
+ }
@Override
public ResponseEntity<Integer> saveTorrent(
@@ -37,42 +53,106 @@
seed.seedsize = "1GB"; // 示例种子大小
seed.seedtag = tag; // 示例标签
seed.url = "http://example.com/torrent"; // 示例URL
- db = new Database1();
- tracker = new Tracker();
- int ret = db.RegisterSeed(seed);
- System.out.println("RegisterSeed ret: " + ret);
- System.out.println(seed.seedid + " " + seed.seeduserid + " " + seed.title + " " + seed.seedsize + " " + seed.seedtag + " " + seed.url);
+
+ int ret = db1.RegisterSeed(seed);
+ // System.out.println("RegisterSeed ret: " + ret);
+ // System.out.println(seed.seedid + " " + seed.seeduserid + " " + seed.title + " " + seed.seedsize + " " + seed.seedtag + " " + seed.url);
+
// Convert MultipartFile to File
File tempFile = File.createTempFile(seed.seedid, file.getOriginalFilename());
file.transferTo(tempFile);
+
tracker.SaveTorrent(seed.seedid, tempFile);
+
// Optionally, delete the temp file after saving if not needed
// tempFile.delete();
- return ResponseEntity.ok(0); // 返回 0 表示成功
+
+ // 创建带有 CORS 响应头的 ResponseEntity
+ HttpHeaders headers = new HttpHeaders();
+ headers.add("Access-Control-Allow-Origin", "*"); // 允许所有域名访问,可以根据需要调整为特定域名
+ headers.add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS"); // 允许的 HTTP 方法
+ headers.add("Access-Control-Allow-Headers", "Content-Type, Authorization"); // 允许的请求头
+
+ return new ResponseEntity<>(0, headers, HttpStatus.OK); // 返回 0 表示成功
} catch (Exception e) {
e.printStackTrace();
- return ResponseEntity.status(500).body(1); // 返回 1 表示失败
+
+ // 创建带有 CORS 响应头的错误 ResponseEntity
+ HttpHeaders errorHeaders = new HttpHeaders();
+ errorHeaders.add("Access-Control-Allow-Origin", "*");
+ errorHeaders.add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
+ errorHeaders.add("Access-Control-Allow-Headers", "Content-Type, Authorization");
+
+ return new ResponseEntity<>(1, errorHeaders, HttpStatus.INTERNAL_SERVER_ERROR); // 返回 1 表示失败
}
}
@Override
+ @CrossOrigin(origins = "*", allowedHeaders = "*") // 允许所有来源和头部
public ResponseEntity<Resource> getTorrent(
- @RequestParam("seedid") String seedid,
- @RequestParam("userid") String userid,
- @RequestParam("ip") String ip
+ @RequestParam("torrentId") String seedid,
+ @RequestParam("userId") String userid
) {
- // 实现获取种子文件的逻辑
- // 示例:从本地目录中查找文件
- tracker = new Tracker();
- File file = tracker.GetTTorent(seedid, userid, ip);
+ File file = tracker.GetTTorent(seedid, userid);
if (file != null) {
FileSystemResource resource = new FileSystemResource(file);
return ResponseEntity.ok()
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + file.getName() + "\"")
+ .header(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS, HttpHeaders.CONTENT_DISPOSITION) // 关键:允许前端访问Content-Disposition
.contentType(MediaType.APPLICATION_OCTET_STREAM)
.body(resource);
} else {
- return ResponseEntity.notFound().build(); // 返回 404 表示文件未找到
+ return ResponseEntity.notFound().build();
+ }
+ }
+
+ //无按标签查询的函数
+ @Override
+ public ResponseEntity<String> getSeedListByTag(
+ @RequestParam("tag") String tag
+ ) {
+ try {
+ Seed[] seeds = db1.GetSeedListByTag(tag);
+ String json = mapper.writeValueAsString(seeds);
+ // System.out.println("getSeedListByTag: " + json);
+ HttpHeaders headers = new HttpHeaders();
+ headers.add("Access-Control-Allow-Origin", "*");
+ headers.add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
+ headers.add("Access-Control-Allow-Headers", "Content-Type, Authorization");
+ return new ResponseEntity<>(json, headers, HttpStatus.OK);
+ } catch (JsonProcessingException e) {
+ e.printStackTrace();
+ HttpHeaders errorHeaders = new HttpHeaders();
+ errorHeaders.add("Access-Control-Allow-Origin", "*");
+ errorHeaders.add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
+ errorHeaders.add("Access-Control-Allow-Headers", "Content-Type, Authorization");
+ return new ResponseEntity<>("[]", errorHeaders, HttpStatus.INTERNAL_SERVER_ERROR);
+ }
+ }
+
+ @Override
+ public ResponseEntity<String> getTorrentDetail(
+ @RequestParam("id") String seedid
+ ) {
+ try {
+ Seed seed = db1.GetSeedInformation(seedid);
+ if (seed != null) {
+ String json = mapper.writeValueAsString(seed);
+ HttpHeaders headers = new HttpHeaders();
+ headers.add("Access-Control-Allow-Origin", "*");
+ headers.add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
+ headers.add("Access-Control-Allow-Headers", "Content-Type, Authorization");
+ return new ResponseEntity<>(json, headers, HttpStatus.OK);
+ } else {
+ return ResponseEntity.notFound().build(); // 返回 404 表示种子未找到
+ }
+ } catch (JsonProcessingException e) {
+ e.printStackTrace();
+ HttpHeaders errorHeaders = new HttpHeaders();
+ errorHeaders.add("Access-Control-Allow-Origin", "*");
+ errorHeaders.add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
+ errorHeaders.add("Access-Control-Allow-Headers", "Content-Type, Authorization");
+ return new ResponseEntity<>("{}", errorHeaders, HttpStatus.INTERNAL_SERVER_ERROR);
}
}
}
\ No newline at end of file
diff --git a/src/main/java/api/ApiInterface.java b/src/main/java/api/ApiInterface.java
index ab3408c..6859aa6 100644
--- a/src/main/java/api/ApiInterface.java
+++ b/src/main/java/api/ApiInterface.java
@@ -23,8 +23,17 @@
@GetMapping("/get-torrent")
ResponseEntity<Resource> getTorrent(
- @RequestParam("seedid") String seedid,
- @RequestParam("userid") String userid,
- @RequestParam("ip") String ip
+ @RequestParam("torrentId") String seedid,
+ @RequestParam("userId") String userid
+ );
+
+ @GetMapping("/get-seed-list-by-tag")
+ ResponseEntity<String> getSeedListByTag(
+ @RequestParam("tag") String tag
+ );
+
+ @GetMapping("/torrent-detail")
+ ResponseEntity<String> getTorrentDetail(
+ @RequestParam("id") String seedid
);
}
\ No newline at end of file