Files
dmt-modelLibrary/web/src/utils/fileDownload.ts
2026-06-02 13:32:08 +08:00

31 lines
961 B
TypeScript

import { resolveStorageUrl } from "../config/runtime";
export async function downloadFileFromUrl(fileUrl: string, fileName: string) {
const response = await fetch(resolveStorageUrl(fileUrl), {
credentials: "include"
});
if (!response.ok) {
throw new Error(`文件下载失败:${response.status} ${response.statusText}`);
}
const blob = await response.blob();
const objectUrl = URL.createObjectURL(blob);
try {
const anchor = document.createElement("a");
anchor.href = objectUrl;
anchor.download = ensureGlbFileName(fileName);
anchor.rel = "noopener";
anchor.style.display = "none";
document.body.appendChild(anchor);
anchor.click();
anchor.remove();
} finally {
window.setTimeout(() => URL.revokeObjectURL(objectUrl), 1000);
}
}
function ensureGlbFileName(fileName: string) {
const name = fileName.trim() || "model.glb";
return name.toLowerCase().endsWith(".glb") ? name : `${name}.glb`;
}