Files
anyame-frontend-vue/server/api/proxy-image.get.ts

44 lines
1.3 KiB
TypeScript

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'
});
}
});