diff --git a/server-rs/crates/api-server/src/modules/game_distribution_media.rs b/server-rs/crates/api-server/src/modules/game_distribution_media.rs index 2ed0207ad..756adf81a 100644 --- a/server-rs/crates/api-server/src/modules/game_distribution_media.rs +++ b/server-rs/crates/api-server/src/modules/game_distribution_media.rs @@ -175,6 +175,10 @@ async fn read_image_field( kind: MediaKind, ) -> Result { let label = kind.label(); + // TODO(perf): `Field::bytes()` 会把整个 part 收成一个 `Bytes`,下面 `to_vec()` 再复制一份, + // 峰值内存约 2× part;单个超大 part 会被完整缓冲后才在下面判 413。彻底做法是改 + // `field.chunk()` 循环累加,边收边按 `MAX_SINGLE_MEDIA_BYTES` 拒绝,并让 `UploadedImage.bytes` + // 直接持有 `Vec`。当前保留现状,先在此标注。 let bytes = field .bytes() .await