diff --git a/apps/desktop/src-tauri/src/infrastructure/gemini_service.rs b/apps/desktop/src-tauri/src/infrastructure/gemini_service.rs index 68d1b29..b994359 100644 --- a/apps/desktop/src-tauri/src/infrastructure/gemini_service.rs +++ b/apps/desktop/src-tauri/src/infrastructure/gemini_service.rs @@ -34,7 +34,9 @@ struct TokenResponse { /// Gemini上传响应 #[derive(Debug, Deserialize)] struct UploadResponse { - file_uri: String, + file_uri: Option, + urn: Option, + name: Option, } /// Gemini内容生成请求 @@ -250,8 +252,14 @@ impl GeminiService { let upload_response: UploadResponse = serde_json::from_str(&response_text) .map_err(|e| anyhow!("解析上传响应失败: {} - 响应内容: {}", e, response_text))?; - println!("✅ 视频上传成功,文件URI: {}", upload_response.file_uri); - Ok(upload_response.file_uri) + // 优先使用urn字段,如果没有则使用file_uri字段 + let file_uri = upload_response.urn + .or(upload_response.file_uri) + .or_else(|| upload_response.name.map(|name| format!("gs://dy-media-storage/{}", name))) + .ok_or_else(|| anyhow!("上传响应中未找到文件URI,响应内容: {}", response_text))?; + + println!("✅ 视频上传成功,文件URI: {}", file_uri); + Ok(file_uri) } /// 生成内容分析