All checks were successful
deploy to server / build-and-deploy (push) Successful in 5m4s
- 添加/download/documentID路由用于文档下载 - server端添加文档元数据获取与下载API - 将app中的types移至shared,与server共享
54 lines
1.4 KiB
TypeScript
54 lines
1.4 KiB
TypeScript
/**
|
|
* 判断文件是否支持预览
|
|
*/
|
|
export function isPreviewable(mime: string | null | undefined): boolean {
|
|
if (!mime || mime === undefined) return false;
|
|
return (
|
|
mime.startsWith('image/') ||
|
|
mime.startsWith('video/') ||
|
|
mime === 'application/pdf' ||
|
|
mime.startsWith('text/')
|
|
);
|
|
}
|
|
|
|
/**
|
|
* 从 Directus 获取文件元信息
|
|
*/
|
|
export async function getFileMeta(id: string): Promise<FileMeta | null> {
|
|
const runtimeConfig = useRuntimeConfig();
|
|
const baseUrl = runtimeConfig.public.directus.url;
|
|
const access_token = runtimeConfig.public.directus.token;
|
|
|
|
try {
|
|
const response = await $fetch<{ data: DirectusFile }>(
|
|
`${baseUrl}/files/${id}`,
|
|
{
|
|
headers: {
|
|
Authorization: access_token ? `Bearer ${access_token}` : '',
|
|
},
|
|
}
|
|
);
|
|
|
|
const file = response.data;
|
|
if (!file) return null;
|
|
|
|
return {
|
|
id: file.id,
|
|
title: file.filename_disk ?? '',
|
|
filename_download: file.filename_download ?? '',
|
|
type: file.type ?? '',
|
|
filesize: Number(file.filesize),
|
|
width: file.width ?? undefined,
|
|
height: file.height ?? undefined,
|
|
uploaded_on: file.uploaded_on ?? undefined,
|
|
url: `${baseUrl}/assets/${file.id}`,
|
|
previewable: isPreviewable(file.type),
|
|
};
|
|
} catch (error) {
|
|
if (error instanceof Error) {
|
|
console.error('Error fetching file metadata:', error.message);
|
|
}
|
|
return null;
|
|
}
|
|
}
|