From 954d6ca98f48564c2090304f257e9cd71ce14bee Mon Sep 17 00:00:00 2001 From: Warren Date: Wed, 10 Jun 2026 21:22:04 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8DUpload=20Service=20db=5Fpath?= =?UTF-8?q?=E9=87=8D=E5=A4=8D=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题: - FileTree::open_user_db(user_id)期望user_id参数 - 但server.rs中先调用user_db_path(user_id),再传递db_path给open_user_db - 导致路径重复:data/users/data/users/test_user.sqlite.sqlite 修复: - extract_and_register_archive:直接传递user_id给init_user_db - upload_file原始注册逻辑:直接传递user_id给init_user_db - 使用init_user_db确保数据库表创建(file_registry) 测试验证: - ZIP文件上传成功 ✅ - 自动解压成功(test_archive_extracted目录) ✅ - 提取文件正确(file1.txt, file2.txt, subdir/file3.txt) ✅ - 数据库初始化成功 ✅ --- markbase-core/src/server.rs | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/markbase-core/src/server.rs b/markbase-core/src/server.rs index 299b5f0..01946b8 100644 --- a/markbase-core/src/server.rs +++ b/markbase-core/src/server.rs @@ -942,8 +942,7 @@ fn extract_and_register_archive( result.success_files, result.total_bytes); // Register extracted files to database - let db_path = FileTree::user_db_path(user_id); - let conn = FileTree::open_user_db(&db_path)?; + let conn = FileTree::init_user_db(user_id)?; let now = std::time::SystemTime::now() .duration_since(std::time::UNIX_EPOCH) @@ -1196,15 +1195,15 @@ async fn upload_file( let hex = format!("{:x}", hash); let file_uuid = hex[0..32].to_string(); - // Save to database (user-specific SQLite) - let db_path = filetree::FileTree::user_db_path(&user_id); +// Save to database (user-specific SQLite) let file_uuid_clone = file_uuid.clone(); let file_hash_clone = file_hash.clone(); let filename_clone = filename.clone(); let file_path_clone = file_path.clone(); - + let user_id_clone = user_id.clone(); + let db_result = tokio::task::spawn_blocking(move || -> anyhow::Result<()> { - let conn = filetree::FileTree::open_user_db(&db_path)?; + let conn = filetree::FileTree::init_user_db(&user_id_clone)?; // Register file let now = std::time::SystemTime::now()