From 462fc856aaae8aa853f0c24d4cc46743f0999771 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BE=B7=E5=AE=87?= Date: Sat, 12 Sep 2026 21:33:48 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=BA=E5=8E=9F=E5=A7=8B=E5=9B=BE=E7=89=87?= =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E8=A7=A3=E6=9E=90=E5=A2=9E=E5=8A=A0=E8=B6=85?= =?UTF-8?q?=E6=97=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 从请求入口开始计算准备截止时间,并限制 multipart 上传解析阶段的最长等待。 --- server-rs/crates/api-server/src/raw_image.rs | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/server-rs/crates/api-server/src/raw_image.rs b/server-rs/crates/api-server/src/raw_image.rs index 106698345..0c243e0d1 100644 --- a/server-rs/crates/api-server/src/raw_image.rs +++ b/server-rs/crates/api-server/src/raw_image.rs @@ -71,10 +71,22 @@ pub(crate) async fn edit_raw_image( Extension(authenticated): Extension, multipart: Multipart, ) -> Result, AppError> { - let payload = parse_multipart_request(multipart).await?; let local_deadline = Instant::now() .checked_add(RAW_IMAGE_PREPARE_TIMEOUT) .unwrap_or_else(Instant::now); + let parse_deadline = request_context + .external_call_deadline() + .map(|deadline| deadline.min(local_deadline)) + .unwrap_or(local_deadline); + let payload = match tokio::time::timeout_at( + tokio::time::Instant::from_std(parse_deadline), + parse_multipart_request(multipart), + ) + .await + { + Ok(result) => result?, + Err(_) => return Err(raw_image_prepare_timeout_error("raw 图片请求解析超时")), + }; let processing_deadline = request_context .external_call_deadline() .map(|deadline| deadline.min(local_deadline))