From fb6b3451884ce5ccbd4cce9e8d1e270cfd0c6ae8 Mon Sep 17 00:00:00 2001 From: imeepos Date: Wed, 16 Jul 2025 22:39:39 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=AF=BC=E5=87=BA?= =?UTF-8?q?=E8=B7=AF=E5=BE=84=E4=B8=AD=E7=9A=84Windows=20UNC=E5=89=8D?= =?UTF-8?q?=E7=BC=80=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加normalize_windows_path函数清理路径格式 - 移除导出结果中的\\\\?\\ UNC前缀 - 确保导出的JSON文件中包含标准Windows路径格式 - 提升剪映导入兼容性 --- .../services/template_matching_result_service.rs | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/apps/desktop/src-tauri/src/business/services/template_matching_result_service.rs b/apps/desktop/src-tauri/src/business/services/template_matching_result_service.rs index d7de3e4..a14f4d5 100644 --- a/apps/desktop/src-tauri/src/business/services/template_matching_result_service.rs +++ b/apps/desktop/src-tauri/src/business/services/template_matching_result_service.rs @@ -300,6 +300,15 @@ pub struct MatchingStatistics { } impl TemplateMatchingResultService { + /// 清理Windows路径格式,移除UNC前缀 + fn normalize_windows_path(path: &str) -> String { + // 移除 \\?\ 前缀(Windows长路径UNC格式) + if path.starts_with("\\\\?\\") { + path.strip_prefix("\\\\?\\").unwrap_or(path).to_string() + } else { + path.to_string() + } + } /// 导出匹配结果到剪映格式 /// 根据模板匹配结果生成剪映可导入的 draft_content.json 文件 pub async fn export_to_jianying( @@ -378,6 +387,9 @@ impl TemplateMatchingResultService { let material_segment = material_repository.get_segment_by_id_sync(&segment_result.material_segment_id)? .ok_or_else(|| anyhow!("找不到素材片段: {}", segment_result.material_segment_id))?; + // 清理文件路径格式 + let normalized_path = Self::normalize_windows_path(&material_segment.file_path); + // 创建剪映视频素材 let video = JianYingVideo { aigc_type: "none".to_string(), @@ -414,7 +426,7 @@ impl TemplateMatchingResultService { local_id: String::new(), local_material_id: Uuid::new_v4().to_string(), material_id: String::new(), - material_name: Path::new(&material_segment.file_path) + material_name: Path::new(&normalized_path) .file_name() .and_then(|n| n.to_str()) .unwrap_or("unknown.mp4") @@ -431,7 +443,7 @@ impl TemplateMatchingResultService { media_path: String::new(), object_locked: None, origin_material_id: String::new(), - path: material_segment.file_path.clone(), // 使用匹配的素材路径 + path: normalized_path.clone(), // 使用清理后的素材路径 picture_from: "none".to_string(), picture_set_category_id: String::new(), picture_set_category_name: String::new(),