Improve AnimeCard by adding tooltip and vibrant shadow
This commit is contained in:
43
server/api/proxy-image.get.ts
Normal file
43
server/api/proxy-image.get.ts
Normal file
@ -0,0 +1,43 @@
|
||||
export default defineEventHandler(async (event) => {
|
||||
const query = getQuery(event);
|
||||
const imageUrl = query.url as string;
|
||||
|
||||
if (!imageUrl) {
|
||||
throw createError({
|
||||
statusCode: 400,
|
||||
statusMessage: 'URL parameter is required'
|
||||
});
|
||||
}
|
||||
|
||||
try {
|
||||
const response = await fetch(imageUrl, {
|
||||
headers: {
|
||||
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
|
||||
}
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
throw createError({
|
||||
statusCode: response.status,
|
||||
statusMessage: 'Failed to fetch image'
|
||||
});
|
||||
}
|
||||
|
||||
const imageBuffer = await response.arrayBuffer();
|
||||
const contentType = response.headers.get('content-type') || 'image/jpeg';
|
||||
|
||||
// Set CORS headers
|
||||
setHeader(event, 'Access-Control-Allow-Origin', '*');
|
||||
setHeader(event, 'Access-Control-Allow-Methods', 'GET');
|
||||
setHeader(event, 'Content-Type', contentType);
|
||||
setHeader(event, 'Cache-Control', 'public, max-age=86400');
|
||||
|
||||
return new Uint8Array(imageBuffer);
|
||||
} catch (error) {
|
||||
console.error('Proxy error:', error);
|
||||
throw createError({
|
||||
statusCode: 500,
|
||||
statusMessage: 'Failed to proxy image'
|
||||
});
|
||||
}
|
||||
});
|
Reference in New Issue
Block a user