From c64dd9ef7ad3683f837063762204da439fe904c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BE=B7=E5=AE=87?= Date: Tue, 1 Sep 2026 16:35:16 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E5=85=85=E9=94=99=E8=AF=AF=E6=8A=A5?= =?UTF-8?q?=E5=91=8A=20OSS=20key=20=E5=9B=9E=E5=BD=92=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 锁定归档路径只含固定前缀和 UUID 文件名 --- server-rs/crates/api-server/src/error_reports.rs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/server-rs/crates/api-server/src/error_reports.rs b/server-rs/crates/api-server/src/error_reports.rs index dc6cb6805..677ea781a 100644 --- a/server-rs/crates/api-server/src/error_reports.rs +++ b/server-rs/crates/api-server/src/error_reports.rs @@ -182,13 +182,12 @@ pub async fn create_error_report( .await .map_err(internal_store_error)?; let digest = format!("{:x}", Sha256::digest(&archive)); - let key_segments = vec!["error-reports".to_string(), "v1".to_string()]; let response = oss .put_object( state.editor_oss_http_client(), OssPutObjectRequest { prefix: LegacyAssetPrefix::AgcErrorReports, - path_segments: key_segments, + path_segments: error_report_oss_path_segments(), file_name: format!("{}.zip", stored.batch_id), content_type: Some("application/zip".to_string()), access: OssObjectAccess::Private, @@ -372,6 +371,10 @@ fn internal_store_error(error: String) -> AppError { AppError::from_status(StatusCode::INTERNAL_SERVER_ERROR).with_message(error) } +fn error_report_oss_path_segments() -> Vec { + vec!["error-reports".to_string(), "v1".to_string()] +} + pub(crate) fn build_error_report_archive( events: &[Event], user_description: Option<&str>, @@ -1040,6 +1043,11 @@ mod tests { assert!(error.contains("events.jsonl")); } + #[test] + fn error_report_oss_path_uses_only_uuid_filename_segment() { + assert_eq!(error_report_oss_path_segments(), ["error-reports", "v1"]); + } + #[test] fn sanitize_report_text_redacts_credentials_and_paths() { assert_eq!(