diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..497f1e0
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,14 @@
+# 使用官方OpenJDK基础镜像（推荐Alpine轻量版）
+FROM eclipse-temurin:17-jdk-alpine
+
+# 设置工作目录
+WORKDIR /app
+
+# 复制构建好的JAR文件到镜像中
+COPY target/G8Backend-0.0.1-SNAPSHOT.jar app.jar
+
+# 暴露Spring Boot默认端口（根据实际项目修改）
+EXPOSE 8080
+
+# 启动命令
+ENTRYPOINT ["java", "-jar", "app.jar"]
\ No newline at end of file
diff --git a/src/main/java/com/example/g8backend/controller/TorrentController.java b/src/main/java/com/example/g8backend/controller/TorrentController.java
index 0c016f4..7640e42 100644
--- a/src/main/java/com/example/g8backend/controller/TorrentController.java
+++ b/src/main/java/com/example/g8backend/controller/TorrentController.java
@@ -34,11 +34,23 @@
         User user = userService.getById(userId);
         String passkey = user.getPasskey();
 
+        String fileName = multipartFile.getOriginalFilename();
+
+        try {
+            assert fileName != null;
+        } catch (AssertionError e) {
+            return ResponseEntity.badRequest().body("文件名不能为空");
+        }
+
+        if (!fileName.endsWith(".torrent")) {
+            return ResponseEntity.badRequest().body("文件格式不正确，请上传.torrent格式的文件");
+        }
+
         File tempFile = File.createTempFile("upload-", ".torrent");
         multipartFile.transferTo(tempFile);
 
         try {
-            torrentService.handleTorrentUpload(tempFile, userId, passkey);
+            torrentService.handleTorrentUpload(tempFile, fileName, userId, passkey);
         } catch (IllegalArgumentException e) {
             return ResponseEntity.badRequest().body(e.getMessage());
         }
diff --git a/src/main/java/com/example/g8backend/entity/Torrent.java b/src/main/java/com/example/g8backend/entity/Torrent.java
index cb9a4eb..e52df8a 100644
--- a/src/main/java/com/example/g8backend/entity/Torrent.java
+++ b/src/main/java/com/example/g8backend/entity/Torrent.java
@@ -15,6 +15,7 @@
     private Long torrentId;
     private Long userId;
     private String torrentName;
+    private String filePath;
     private String infoHash;
     private Double fileSize;
 
diff --git a/src/main/java/com/example/g8backend/mapper/TorrentMapper.java b/src/main/java/com/example/g8backend/mapper/TorrentMapper.java
index f78a68b..6c3d215 100644
--- a/src/main/java/com/example/g8backend/mapper/TorrentMapper.java
+++ b/src/main/java/com/example/g8backend/mapper/TorrentMapper.java
@@ -7,8 +7,9 @@
 
 @Mapper
 public interface TorrentMapper extends BaseMapper<Torrent> {
-    int insertTorrent (@Param("userId") Long userId,
+    void insertTorrent (@Param("userId") Long userId,
                        @Param("torrentName") String torrentName,
+                       @Param("filePath") String filePath,
                        @Param("infoHash") String infoHash,
                        @Param("fileSize") Double fileSize);
     Torrent getTorrentByInfoHash (@Param("infoHash") String infoHash);
diff --git a/src/main/java/com/example/g8backend/service/ITorrentService.java b/src/main/java/com/example/g8backend/service/ITorrentService.java
index 87622c8..517887c 100644
--- a/src/main/java/com/example/g8backend/service/ITorrentService.java
+++ b/src/main/java/com/example/g8backend/service/ITorrentService.java
@@ -7,7 +7,7 @@
 import java.io.IOException;
 
 public interface ITorrentService extends IService<Torrent> {
-    Torrent handleTorrentUpload(File file, Long userId, String passkey) throws IOException;
+    Torrent handleTorrentUpload(File file, String fileName,Long userId, String passkey) throws IOException;
     File handleTorrentDownload(Torrent torrent, String passkey) throws IOException;
     Torrent findByInfoHash(String infoHash);
     Torrent findByTorrentId(Long torrentId);
diff --git a/src/main/java/com/example/g8backend/service/impl/TorrentServiceImpl.java b/src/main/java/com/example/g8backend/service/impl/TorrentServiceImpl.java
index 199ff2a..43855a4 100644
--- a/src/main/java/com/example/g8backend/service/impl/TorrentServiceImpl.java
+++ b/src/main/java/com/example/g8backend/service/impl/TorrentServiceImpl.java
@@ -20,7 +20,7 @@
     String tracker = "http://127.0.0.1:8080/tracker/announce/";
 
     @Override
-    public Torrent handleTorrentUpload(File file, Long userId, String passkey) throws IOException, IllegalArgumentException {
+    public Torrent handleTorrentUpload(File file, String fileName, Long userId, String passkey) throws IOException, IllegalArgumentException {
         // 修改 announce 字段
         byte[] modifiedBytes = TorrentUtil.injectTracker(file, tracker + passkey);
 
@@ -44,7 +44,7 @@
         }
 
         // 插入数据库
-        torrentMapper.insertTorrent(userId, file.getName(), infoHash, fileSize);
+        torrentMapper.insertTorrent(userId, fileName, file.getName(), infoHash, fileSize);
 
         // 构建返回实体
         Torrent torrent = new Torrent();
@@ -57,7 +57,7 @@
 
     @Override
     public File handleTorrentDownload(Torrent torrent, String passkey) throws IOException {
-        File torrentFile = new File("uploaded-torrents/" + torrent.getTorrentName());
+        File torrentFile = new File("uploaded-torrents/" + torrent.getFilePath());
         byte[] modifiedBytes = TorrentUtil.injectTracker(torrentFile, tracker + passkey);
 
         File tempFile = File.createTempFile("user_torrent_", ".torrent");
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index 4a4d894..4e44282 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -3,7 +3,7 @@
 spring.datasource.url=jdbc:mysql://localhost:3306/g8backend
 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
 spring.sql.init.mode=always
-logging.level.root=DEBUG
+#logging.level.root=DEBUG
 
 mybatis-plus.mapper-locations=classpath*:/mapper/**/*.xml
 
diff --git a/src/main/resources/data.sql b/src/main/resources/data.sql
index 607d353..a6860f1 100644
--- a/src/main/resources/data.sql
+++ b/src/main/resources/data.sql
@@ -1,11 +1,66 @@
-# # 后面统一数据库数据用
-#
-# # tags表父标签
-# INSERT INTO `tags` (tag_id, tag_name, parent_id) VALUES (1, '电影', NULL);
-# INSERT INTO `tags` (tag_id, tag_name, parent_id) VALUES (2, '游戏', NULL);
-# INSERT INTO `tags` (tag_id, tag_name, parent_id) VALUES (3, '音乐', NULL);
-#
-# # tags表子标签
-# INSERT INTO `tags` (tag_id, tag_name, parent_id) VALUES (4, '动作', 1);
-# INSERT INTO `tags` (tag_id, tag_name, parent_id) VALUES (5, '喜剧', 1);
-# INSERT INTO `tags` (tag_id, tag_name, parent_id) VALUES (6, '科幻', 1);
\ No newline at end of file
+-- Game 分类
+INSERT IGNORE INTO tags (tag_id, tag_name, parent_id) VALUES (0, 'Game', NULL);
+INSERT IGNORE INTO tags (tag_id, tag_name, parent_id) VALUES
+                                                          (1, 'android', 0),
+                                                          (2, 'mac', 0),
+                                                          (3, 'pc', 0),
+                                                          (4, 'ios', 0),
+                                                          (5, 'other', 0),
+                                                          (6, 'action', 0),
+                                                          (7, 'adventure', 0),
+                                                          (8, 'leisure', 0),
+                                                          (9, 'riddle', 0),
+                                                          (10, 'sport', 0),
+                                                          (11, 'strategy', 0),
+                                                          (12, 'table', 0);
+
+-- video 分类
+INSERT IGNORE INTO tags (tag_id, tag_name, parent_id) VALUES (20, 'video', NULL);
+INSERT IGNORE INTO tags (tag_id, tag_name, parent_id) VALUES
+                                                          (21, 'chinese', 20),
+                                                          (22, 'America', 20),
+                                                          (23, 'Japan', 20),
+                                                          (24, 'Korea', 20),
+                                                          (25, 'Europe', 20),
+                                                          (26, 'other', 20),
+                                                          (27, 'Short', 20),
+                                                          (28, 'plot', 20),
+                                                          (29, 'comedy', 20),
+                                                          (30, 'love', 20),
+                                                          (31, 'action', 20),
+                                                          (32, 'terror', 20),
+                                                          (33, 'science fiction', 20),
+                                                          (34, 'commit a crime', 20),
+                                                          (35, 'Thriller', 20);
+
+-- music 分类
+INSERT IGNORE INTO tags (tag_id, tag_name, parent_id) VALUES (40, 'music', NULL);
+INSERT IGNORE INTO tags (tag_id, tag_name, parent_id) VALUES
+                                                          (41, 'chinese', 40),
+                                                          (42, 'America', 40),
+                                                          (43, 'Japan', 40),
+                                                          (44, 'Korea', 40),
+                                                          (45, 'Europe', 40),
+                                                          (46, 'other', 40),
+                                                          (47, 'rap', 40),
+                                                          (48, 'Electric sound', 40),
+                                                          (49, 'Guofeng', 40),
+                                                          (50, 'motion', 40),
+                                                          (51, 'ballad', 40),
+                                                          (52, 'Rock and roll', 40),
+                                                          (53, 'classical', 40);
+
+-- software 分类
+INSERT IGNORE INTO tags (tag_id, tag_name, parent_id) VALUES (60, 'software', NULL);
+INSERT IGNORE INTO tags (tag_id, tag_name, parent_id) VALUES
+                                                          (61, 'android', 60),
+                                                          (62, 'mac', 60),
+                                                          (63, 'pc', 60),
+                                                          (64, 'ios', 60),
+                                                          (65, 'other', 60),
+                                                          (66, 'life', 60),
+                                                          (67, 'shopping', 60),
+                                                          (68, 'video', 60),
+                                                          (69, 'music', 60),
+                                                          (70, 'read', 60),
+                                                          (71, 'system', 60);
diff --git a/src/main/resources/mapper/TorrentMapper.xml b/src/main/resources/mapper/TorrentMapper.xml
index 9b53d29..243fd92 100644
--- a/src/main/resources/mapper/TorrentMapper.xml
+++ b/src/main/resources/mapper/TorrentMapper.xml
@@ -4,8 +4,8 @@
 
 <mapper namespace="com.example.g8backend.mapper.TorrentMapper">
     <insert id="insertTorrent" >
-        INSERT INTO torrents (user_id, torrent_name, info_hash, file_size)
-        VALUES (#{userId}, #{torrentName}, UNHEX(#{infoHash}), #{fileSize})
+        INSERT INTO torrents (user_id, torrent_name, file_path, info_hash, file_size)
+        VALUES (#{userId}, #{torrentName}, #{filePath}, UNHEX(#{infoHash}), #{fileSize})
     </insert>
 
     <select id="getTorrentByInfoHash" resultType="com.example.g8backend.entity.Torrent">
@@ -13,6 +13,7 @@
             torrent_id,
             user_id,
             torrent_name,
+            file_path,
             HEX(info_hash) AS infoHash,
             file_size
         FROM torrents
@@ -24,6 +25,7 @@
             torrent_id,
             user_id,
             torrent_name,
+            file_path,
             HEX(info_hash) AS infoHash,
             file_size
         FROM torrents
diff --git a/src/main/resources/schema.sql b/src/main/resources/schema.sql
index 5cb15a5..09276b4 100644
--- a/src/main/resources/schema.sql
+++ b/src/main/resources/schema.sql
@@ -21,6 +21,7 @@
   `torrent_id` INT AUTO_INCREMENT PRIMARY KEY,
   `user_id` INT NOT NULL,
   `torrent_name` VARCHAR(255) NOT NULL,
+  `file_path` VARCHAR(255) NOT NULL,
   `info_hash` BINARY(20) NOT NULL,
   `file_size` FLOAT NOT NULL,
   FOREIGN KEY (`user_id`) REFERENCES `users`(`user_id`)
@@ -46,17 +47,19 @@
   `view_count` INT DEFAULT 0 COMMENT '浏览数',
   `post_title` VARCHAR(255) NOT NULL,
   `post_content` TEXT NOT NULL,
+  `torrent_id` INT DEFAULT NULL,
   `post_type` ENUM('resource', 'discussion') NOT NULL,
   `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
   `last_calculated` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后热度计算时间',
   FOREIGN KEY (`user_id`) REFERENCES `users`(`user_id`),
+  FOREIGN KEY (`torrent_id`) REFERENCES `torrents`(`torrent_id`),
   INDEX `idx_hot_score` (`hot_score`),          -- 新增热度索引
   INDEX `idx_post_type` (`post_type`)           -- 新增类型索引
 );
 -- 标签表（保持不变）
 CREATE TABLE IF NOT EXISTS `tags`(
-  `tag_id` INT AUTO_INCREMENT PRIMARY KEY,
-  `tag_name` VARCHAR(255) NOT NULL UNIQUE,
+  `tag_id` INT PRIMARY KEY,
+  `tag_name` VARCHAR(255) NOT NULL,
   `parent_id` INT DEFAULT NULL,
   FOREIGN KEY (`parent_id`) REFERENCES `tags`(`tag_id`)
 );
@@ -120,7 +123,7 @@
   FOREIGN KEY (`post_id`) REFERENCES `posts`(`post_id`),
   INDEX `idx_user_view_time` (`user_id`, `view_time` DESC)  -- 新增用户浏览时间索引
 );
-CREATE TABLE user_tag_preference (
+CREATE TABLE IF NOT EXISTS user_tag_preference (
     user_id INT NOT NULL COMMENT '用户ID',
     tag_id INT NOT NULL COMMENT '标签ID',
     weight DOUBLE DEFAULT 1.0 COMMENT '偏好权重（浏览越多权重越高）',
diff --git a/src/test/java/com/example/g8backend/service/TorrentServiceTest.java b/src/test/java/com/example/g8backend/service/TorrentServiceTest.java
index 6ddca58..fd6d88a 100644
--- a/src/test/java/com/example/g8backend/service/TorrentServiceTest.java
+++ b/src/test/java/com/example/g8backend/service/TorrentServiceTest.java
@@ -83,12 +83,13 @@
                     .thenReturn(mockedBytes);
             mockedStatic.when(() -> TorrentUtil.getInfoHash(any(File.class)))
                     .thenReturn(expectedInfoHash);
-            Torrent torrent = torrentService.handleTorrentUpload(torrentFile, userId, passkey);
+            Torrent torrent = torrentService.handleTorrentUpload(torrentFile,"test.torrent", userId, passkey);
 
             // 验证调用
             verify(torrentMapper, times(1))
                     .insertTorrent(eq(1L),
                             anyString(),
+                            anyString(),
                             eq("modified-info-hash"),
                             eq(torrentFile.length()/1024.0/1024.0));
 
