All checks were successful
deploy to server / build-and-deploy (push) Successful in 3m2s
37 lines
992 B
TypeScript
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;
|
|
});
|