refactor: 将文件请求由app端转到server端
All checks were successful
deploy to server / build-and-deploy (push) Successful in 3m2s
All checks were successful
deploy to server / build-and-deploy (push) Successful in 3m2s
This commit is contained in:
36
server/api/assets/[id].ts
Normal file
36
server/api/assets/[id].ts
Normal file
@ -0,0 +1,36 @@
|
||||
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;
|
||||
});
|
||||
@ -41,7 +41,7 @@ export async function getFileMeta(id: string): Promise<FileMeta | null> {
|
||||
width: file.width ?? undefined,
|
||||
height: file.height ?? undefined,
|
||||
uploaded_on: file.uploaded_on ?? undefined,
|
||||
url: `${baseUrl}/assets/${file.id}`,
|
||||
url: `/api/assets/${file.id}`,
|
||||
previewable: isPreviewable(file.type),
|
||||
};
|
||||
} catch (error) {
|
||||
|
||||
Reference in New Issue
Block a user