Fix image not load

This commit is contained in:
kuekhaoyang
2026-01-13 15:37:38 +08:00
parent 427f4e2a9a
commit 43279c2e1a
2 changed files with 69 additions and 0 deletions
+60
View File
@@ -0,0 +1,60 @@
import { NextResponse } from 'next/server';
export const runtime = 'nodejs';
export async function GET(request: Request) {
const { searchParams } = new URL(request.url);
const imageUrl = searchParams.get('url');
if (!imageUrl) {
return NextResponse.json({ error: 'Missing image URL' }, { status: 400 });
}
try {
const imageResponse = await fetch(imageUrl, {
headers: {
'User-Agent':
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36',
Accept: 'image/jpeg,image/png,image/gif,*/*;q=0.8',
Referer: 'https://movie.douban.com/',
},
});
if (!imageResponse.ok) {
return NextResponse.json(
{ error: imageResponse.statusText },
{ status: imageResponse.status }
);
}
const contentType = imageResponse.headers.get('content-type');
if (!imageResponse.body) {
return NextResponse.json(
{ error: 'Image response has no body' },
{ status: 500 }
);
}
// 创建响应头
const headers = new Headers();
if (contentType) {
headers.set('Content-Type', contentType);
}
// 设置缓存头
headers.set('Cache-Control', 'public, max-age=15720000, s-maxage=15720000');
// 直接返回图片流
// @ts-ignore
return new Response(imageResponse.body, {
status: 200,
headers,
});
} catch (error) {
return NextResponse.json(
{ error: 'Error fetching image' },
{ status: 500 }
);
}
}
+9
View File
@@ -25,6 +25,15 @@ export async function GET(request: Request) {
}
const data = await response.json();
// 转换图片链接使用代理
if (data.subjects && Array.isArray(data.subjects)) {
data.subjects = data.subjects.map((item: any) => ({
...item,
cover: item.cover ? `/api/douban/image?url=${encodeURIComponent(item.cover)}` : item.cover,
}));
}
return NextResponse.json(data);
} catch (error) {
console.error('Douban API error:', error);