From 5cd016cd5dba71e554c0a5e2e0f493fa76917d3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=98=BF=E7=94=B7?= Date: Tue, 28 Apr 2026 10:14:27 +0800 Subject: [PATCH] feat(htyproc): IMAGE_FORM_COMPRESS task posts form_image_compress_audit to ai-api Made-with: Cursor --- htyproc/src/processor.rs | 3 +++ htyproc/src/tasks/mod.rs | 3 ++- htyproc/src/tasks/pipelines.rs | 40 ++++++++++++++++++++++++++++++++++ htyts_models/src/task_type.rs | 4 ++++ 4 files changed, 49 insertions(+), 1 deletion(-) diff --git a/htyproc/src/processor.rs b/htyproc/src/processor.rs index b0113c2..d6b2cb6 100644 --- a/htyproc/src/processor.rs +++ b/htyproc/src/processor.rs @@ -247,6 +247,9 @@ async fn run_one( TaskType::VideoCompression => { tasks::run_video_compression_task(rt, sudo, host, &mut req).await } + TaskType::ImageFormCompress => { + tasks::run_image_form_compress_task(rt, sudo, host, &mut req).await + } TaskType::Noop | TaskType::TestUpyunRemove => Ok(()), }; match &res { diff --git a/htyproc/src/tasks/mod.rs b/htyproc/src/tasks/mod.rs index 41d86b4..f2423f4 100644 --- a/htyproc/src/tasks/mod.rs +++ b/htyproc/src/tasks/mod.rs @@ -3,5 +3,6 @@ mod pipelines; pub use pipelines::{ - run_ai_score_task, run_audio_file_ai_score_task, run_video_compression_task, run_watermark_task, + run_ai_score_task, run_audio_file_ai_score_task, run_image_form_compress_task, + run_video_compression_task, run_watermark_task, }; diff --git a/htyproc/src/tasks/pipelines.rs b/htyproc/src/tasks/pipelines.rs index 9aaafc8..3f354f6 100644 --- a/htyproc/src/tasks/pipelines.rs +++ b/htyproc/src/tasks/pipelines.rs @@ -39,6 +39,46 @@ pub async fn run_ai_score_task( Ok(()) } +/// `IMAGE_FORM_COMPRESS`:压缩直传已在 ngx 完成;此处仅向 ai-api 登记 URL(日志/后续扩展),不重跑压缩。 +pub async fn run_image_form_compress_task( + rt: &Arc, + sudo: &str, + host: &str, + req: &mut ReqTask, +) -> anyhow::Result<()> { + let ts_tid = req.task_id.as_deref().unwrap_or(""); + let raw = req + .payload + .as_ref() + .ok_or_else(|| anyhow::anyhow!("missing payload"))?; + let public_url = raw + .get("url") + .and_then(|v| v.as_str()) + .filter(|s| !s.is_empty()) + .ok_or_else(|| anyhow::anyhow!("IMAGE_FORM_COMPRESS: missing payload.url"))?; + let hint: String = public_url.chars().take(120).collect(); + let base = rt.ai_url.trim_end_matches('/'); + let url = format!("{base}/api/v1/ai/form_image_compress_audit"); + tracing::debug!( + ts_task_id = %ts_tid, + endpoint = %url, + url_prefix = %hint, + "IMAGE_FORM_COMPRESS: POST ai-api audit", + ); + let body = json!({ "url": public_url }); + let resp = rt + .http + .post(&url) + .header("HtySudoerToken", sudo) + .header("HtyHost", host) + .json(&body) + .send() + .await?; + parse_hty_response(resp).await?; + tracing::debug!(ts_task_id = %ts_tid, "IMAGE_FORM_COMPRESS: ai-api audit ok"); + Ok(()) +} + pub async fn run_watermark_task( rt: &Arc, sudo: &str, diff --git a/htyts_models/src/task_type.rs b/htyts_models/src/task_type.rs index 3eba973..8f34a16 100644 --- a/htyts_models/src/task_type.rs +++ b/htyts_models/src/task_type.rs @@ -12,6 +12,8 @@ pub enum TaskType { AudioFileAiScore, Watermark, VideoCompression, + /// 机构首页等经 OpenResty `form_upload_to_compress` 已落又拍后的登记任务;载荷见 `payload.url`。 + ImageFormCompress, TestUpyunRemove, } @@ -27,6 +29,7 @@ impl FromStr for TaskType { "AUDIO_FILE_AI_SCORE" => Ok(Self::AudioFileAiScore), "WATERMARK" => Ok(Self::Watermark), "VIDEO_COMPRESSION" => Ok(Self::VideoCompression), + "IMAGE_FORM_COMPRESS" => Ok(Self::ImageFormCompress), "TEST_UPYUN_REMOVE" => Ok(Self::TestUpyunRemove), _ => Err(format!("unknown TaskType: {s}")), } @@ -45,6 +48,7 @@ impl TaskType { Self::AudioFileAiScore => "AUDIO_FILE_AI_SCORE", Self::Watermark => "WATERMARK", Self::VideoCompression => "VIDEO_COMPRESSION", + Self::ImageFormCompress => "IMAGE_FORM_COMPRESS", Self::TestUpyunRemove => "TEST_UPYUN_REMOVE", } }