修改Real-ESRGAN备用API为URL方式调用
Some checks failed
Lint / build (20) (push) Has been cancelled
Playwright Tests / test (push) Has been cancelled

变更:
- 改为先上传原图到S3获取URL
- 使用/upscale/url接口而非/upscale/base64
- URL方式传输效率更高,适合大图处理
- Real-ESRGAN API会自动处理并返回处理后的S3 URL
This commit is contained in:
Your Name 2026-01-04 16:04:09 +08:00
parent 88ac9e2a46
commit 00b167909f

View File

@ -420,39 +420,44 @@ export async function POST(request: NextRequest) {
// ========== 备用API处理路径 (Real-ESRGAN) ==========
if (useBackupApi) {
console.log("[Enhance API] 使用Real-ESRGAN备用API处理...");
console.log("[Enhance API] 使用Real-ESRGAN备用API处理(URL方式)...");
try {
// 使用Base64方式调用Real-ESRGAN API
const result = await processWithRealESRGANBase64(imageBase64, {
// 步骤1: 先将Base64图片上传到S3获取公开可访问的URL
console.log(`[Enhance-RealESRGAN] 📤 步骤1: 上传原图到S3获取URL...`);
const tempUploadResult = await uploadBase64ToS3(imageBase64, "image/jpeg");
const sourceImageUrl = tempUploadResult.original;
console.log(`[Enhance-RealESRGAN] ✅ 原图已上传,URL: ${sourceImageUrl}`);
// 步骤2: 使用URL方式调用Real-ESRGAN API
console.log(`[Enhance-RealESRGAN] 🔄 步骤2: 调用Real-ESRGAN API处理...`);
const result = await processWithRealESRGAN(sourceImageUrl, {
backupApiUrl: config.backupApiUrl!,
backupApiKey: config.backupApiKey!,
backupScale: config.backupScale || "4",
backupModel: config.backupModel || "RealESRGAN_x4plus",
});
// 上传处理后的图片到S3
// 步骤3: Real-ESRGAN API返回的URL就是处理后的图片
// 需要重新上传到我们的S3(因为Real-ESRGAN返回的URL可能在另一个S3桶)
console.log(`[Enhance-RealESRGAN] 📤 步骤3: 上传处理后的图片到S3...`);
let thumbnailUrl: string;
let originalUrl: string;
try {
console.log(`[Enhance-RealESRGAN] 📤 上传处理后的图片到S3...`);
const uploadResult = await uploadBase64ToS3(result.imageBase64, "image/png");
thumbnailUrl = uploadResult.thumbnail;
originalUrl = uploadResult.original;
console.log(`[Enhance-RealESRGAN] ✅ 上传成功: ${originalUrl}`);
console.log(`[Enhance-RealESRGAN] ✅ 处理后图片已上传: ${originalUrl}`);
} catch (uploadError) {
console.error("[Enhance-RealESRGAN] ❌ 上传到S3失败:", uploadError);
return NextResponse.json(
{
error: "图片上传到存储桶失败",
detail: uploadError instanceof Error ? uploadError.message : "未知错误"
},
{ status: 500 }
);
// 如果上传失败,直接使用Real-ESRGAN返回的URL
console.log(`[Enhance-RealESRGAN] ⚠️ 使用Real-ESRGAN返回的URL作为备选: ${result.imageUrl}`);
thumbnailUrl = result.imageUrl;
originalUrl = result.imageUrl;
}
// 保存到数据库
// 步骤4: 保存到数据库
try {
const [savedImage] = await db.insert(generatedImage).values({
userId,
@ -471,13 +476,14 @@ export async function POST(request: NextRequest) {
}
// 返回结果
console.log(`[Enhance-RealESRGAN] ✅ 全部完成,总耗时: ${result.processingTime.toFixed(2)}秒`);
return NextResponse.json({
success: true,
image_base64: result.imageBase64,
thumbnail_url: thumbnailUrl,
original_url: originalUrl,
processing_time: result.processingTime,
api_type: "realesrgan",
api_type: "realesrgan-url",
});
} catch (error) {