Files
jinshen-website/server/api/assets/[id].ts
R2m1liA a520775a8d
All checks were successful
deploy to server / build-and-deploy (push) Successful in 3m2s
refactor: 将文件请求由app端转到server端
2025-11-12 18:19:21 +08:00

37 lines
992 B
TypeScript

export default defineEventHandler(async (event) => {
const id = getRouterParam(event, 'id');
if (!id)
throw createError({
statusCode: 400,
statusMessage: 'ID parameter is required',
});
const url = new URL(`${useRuntimeConfig().public.directus.url}/assets/${id}`);
const query = getQuery(event);
Object.entries(query).forEach(([key, value]) => {
url.searchParams.set(key, String(value));
});
const token = useRuntimeConfig().public.directus.token || '';
const res = await fetch(url.toString(), {
headers: {
Authorization: `Bearer ${token}`,
},
});
if (!res.ok) {
throw createError({
statusCode: res.status,
statusMessage: `Failed to fetch asset: ${res.statusText}`,
});
}
const contentType =
res.headers.get('Content-Type') || 'application/octet-stream';
setHeader(event, 'Content-Type', contentType);
setHeader(event, 'Cache-Control', 'public, max-age=86400, immutable');
return res.body;
});