Files
gongxue-base/apps/admin/src/utils/download.ts

34 lines
1.0 KiB
TypeScript

import { useUserStore } from '../store/user/userStore';
/**
* Download a file from the API as a blob and trigger a browser download.
*
* @param endpoint - API path (e.g. '/rooms/template')
* @param filename - Suggested filename for the download
*/
export async function downloadBlob(endpoint: string, filename: string): Promise<void> {
const baseURL = import.meta.env.PROD
? '/api'
: `http://localhost:${import.meta.env.VITE_API_PORT || 3002}/api`;
const token = useUserStore.getState().token;
const res = await fetch(`${baseURL}${endpoint}`, {
headers: { Authorization: `Bearer ${token}` },
});
if (!res.ok) {
const text = await res.text().catch(() => '');
throw new Error(text || `下载失败 (HTTP ${res.status})`);
}
const blob = await res.blob();
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = filename;
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
URL.revokeObjectURL(url);
}