From d1f9f4e1efe88a0866a8af7d9aa0213b5f8efdf0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BE=B7=E5=AE=87?= Date: Tue, 8 Sep 2026 12:16:00 +0800 Subject: [PATCH] =?UTF-8?q?=E5=87=8F=E5=B0=91=E5=9B=BE=E7=89=87=E7=BC=96?= =?UTF-8?q?=E8=BE=91=20multipart=20=E5=AD=97=E8=8A=82=E5=A4=8D=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将已克隆的选项按值传入阻塞传输函数 构造 mask 与参考图表单时直接移动字节缓冲 --- .../src/vector_engine/curl_transport.rs | 44 ++++++++++++------- 1 file changed, 29 insertions(+), 15 deletions(-) diff --git a/server-rs/crates/platform-image/src/vector_engine/curl_transport.rs b/server-rs/crates/platform-image/src/vector_engine/curl_transport.rs index 6e653356c..fdc35a71d 100644 --- a/server-rs/crates/platform-image/src/vector_engine/curl_transport.rs +++ b/server-rs/crates/platform-image/src/vector_engine/curl_transport.rs @@ -168,8 +168,8 @@ pub(crate) async fn send_vector_engine_multipart_edit_request_with_curl_options( negative_prompt.as_deref(), normalized_size.as_str(), candidate_count, - reference_images.as_slice(), - options.as_ref(), + reference_images, + options, timeout_ms, ) }) @@ -271,8 +271,8 @@ fn send_multipart_edit_request_with_curl_blocking( negative_prompt: Option<&str>, normalized_size: &str, candidate_count: u32, - reference_images: &[ReferenceImage], - options: Option<&RawImageEditOptions>, + reference_images: Vec, + options: Option, timeout_ms: u64, ) -> Result { let mut form = Form::new(); @@ -288,34 +288,48 @@ fn send_multipart_edit_request_with_curl_blocking( .add()?; if let Some(options) = options { - if let Some(quality) = options.quality.as_deref() { + let RawImageEditOptions { + quality, + background, + output_format, + mask, + .. + } = options; + if let Some(quality) = quality { form.part("quality").contents(quality.as_bytes()).add()?; } - if let Some(background) = options.background.as_deref() { + if let Some(background) = background { form.part("background") .contents(background.as_bytes()) .add()?; } - if let Some(output_format) = options.output_format.as_deref() { + if let Some(output_format) = output_format { form.part("output_format") .contents(output_format.as_bytes()) .add()?; } - if let Some(mask) = options.mask.as_ref() { + if let Some(mask) = mask { + let ReferenceImage { + bytes, + mime_type, + file_name, + } = mask; form.part("mask") - .buffer(mask.file_name.as_str(), mask.bytes.clone()) - .content_type(mask.mime_type.as_str()) + .buffer(file_name.as_str(), bytes) + .content_type(mime_type.as_str()) .add()?; } } for reference_image in reference_images { + let ReferenceImage { + bytes, + mime_type, + file_name, + } = reference_image; form.part("image") - .buffer( - reference_image.file_name.as_str(), - reference_image.bytes.clone(), - ) - .content_type(reference_image.mime_type.as_str()) + .buffer(file_name.as_str(), bytes) + .content_type(mime_type.as_str()) .add()?; }