From 0b8eb6edea18ad333d7ad2910b4c0c46167cd526 Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 3 Feb 2026 10:45:22 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=8E=BB=E6=B0=B4=E5=8D=B0=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E5=85=88=E4=B8=8A=E4=BC=A0=E5=9B=BE=E7=89=87=E5=88=B0?= =?UTF-8?q?S3=E7=A1=AE=E4=BF=9D=E5=85=AC=E7=BD=91=E5=8F=AF=E8=AE=BF?= =?UTF-8?q?=E9=97=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/watermark-remove/route.ts | 56 +++++++++++++++++++------------ 1 file changed, 34 insertions(+), 22 deletions(-) diff --git a/app/api/watermark-remove/route.ts b/app/api/watermark-remove/route.ts index ac95c67..758def0 100644 --- a/app/api/watermark-remove/route.ts +++ b/app/api/watermark-remove/route.ts @@ -5,6 +5,8 @@ import { systemSettings, generatedImage } from "@/lib/db/schema"; import { eq } from "drizzle-orm"; import { uploadFile } from "@/lib/storage/service"; +// PicWish API 需要公网可访问的 HTTP/HTTPS URL + // 获取去水印API配置 async function getWatermarkRemoveConfig() { try { @@ -86,13 +88,21 @@ export async function POST(request: NextRequest) { const startTime = Date.now(); - // 获取请求参数 + // 获取请求参数 - 只接受URL方式 const body = await request.json(); - const { image_url, image_base64 } = body; + const { image_url } = body; - if (!image_url && !image_base64) { + if (!image_url) { return NextResponse.json( - { error: "请提供图片URL或Base64数据" }, + { error: "请提供图片URL" }, + { status: 400 } + ); + } + + // 验证URL格式 + if (!image_url.startsWith("http://") && !image_url.startsWith("https://")) { + return NextResponse.json( + { error: "图片URL格式无效" }, { status: 400 } ); } @@ -106,31 +116,33 @@ export async function POST(request: NextRequest) { ); } - // 如果传入的是base64,需要先上传到S3获取URL - let imageUrl = image_url; - if (image_base64 && !image_url) { - try { - const buffer = Buffer.from(image_base64, "base64"); - const arrayBuffer = buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength); - const filename = `watermark-temp-${Date.now()}.jpeg`; - const uploadResult = await uploadFile(filename, arrayBuffer); - imageUrl = uploadResult.url; - console.log("[WatermarkRemove] Base64图片已上传到S3:", imageUrl); - } catch (uploadError) { - console.error("[WatermarkRemove] 上传图片失败:", uploadError); - return NextResponse.json( - { error: "上传图片失败" }, - { status: 500 } - ); + console.log("[WatermarkRemove] 原始图片URL:", image_url); + + // 下载原图并重新上传到S3,确保获取公网可访问的URL + let publicImageUrl = image_url; + try { + console.log("[WatermarkRemove] 下载原图并上传到S3..."); + const imageResponse = await fetch(image_url); + if (!imageResponse.ok) { + throw new Error("下载原图失败"); } + const imageBuffer = await imageResponse.arrayBuffer(); + const filename = `watermark-input-${Date.now()}.jpg`; + const uploadResult = await uploadFile(filename, imageBuffer); + publicImageUrl = uploadResult.url; + console.log("[WatermarkRemove] 图片已上传到S3:", publicImageUrl); + } catch (downloadError) { + console.error("[WatermarkRemove] 下载/上传原图失败:", downloadError); + // 如果下载失败,尝试使用原始URL + console.log("[WatermarkRemove] 尝试使用原始URL"); } - console.log("[WatermarkRemove] 开始处理图片:", imageUrl); + console.log("[WatermarkRemove] 开始处理图片:", publicImageUrl); // 创建去水印任务 const formData = new FormData(); formData.append("sync", "0"); - formData.append("url", imageUrl); + formData.append("url", publicImageUrl); const createResponse = await fetch( "https://techsz.aoscdn.com/api/tasks/visual/external/watermark-remove",