"use strict"
* @本应用的全局状态变量及通用方法
* downloadFile() 下载文件
* downloadJson() 将JSON对象下载为js文件。(可能会废弃)
*/
* downloadFile 下载文件
* @param { ArrayBuffer } dataBuffer Buffer格式的数据对象。
* @param { string } fileName 文件名(含扩展名)。
* @param { string } [fileType = "application/octet-stream"] 文件MIME类型。
*/
export function downloadFile(dataBuffer, fileName, fileType = "application/octet-stream") {
const dataBlob = new Blob([dataBuffer], { type: fileType })
const url = URL.createObjectURL(dataBlob)
const downloadLink = document.createElement("a")
downloadLink.style.display = "none"
downloadLink.download = fileName
downloadLink.href = url
document.body.appendChild(downloadLink)
let isCleanedUp = false
requestAnimationFrame(() => {
window.addEventListener("focus", _cleanup, { once: true })
downloadLink.click()
setTimeout(_cleanup, 60000)
})
* 清理函数,移除DOM元素,释放Blob URL
* 防止内存泄漏和资源浪费
*/
function _cleanup() {
if (isCleanedUp) { return }
document.body.removeChild(downloadLink)
URL.revokeObjectURL(url)
isCleanedUp = true
}
}
* downloadJson 将JSON对象下载为js文件
* @param { JSON } datasetJson 数据集对象。
* @param { String } datasetName 数据集的名称。
* @note 数据集对象必须得是JSON化的。
*/
export function downloadJson(datasetJson, datasetName) {
const jsonStr = `export const ${ datasetName } = ${ JSON.stringify(datasetJson) }`
const encoder = new TextEncoder()
const jsonUint8Array = encoder.encode(jsonStr)
downloadFile(jsonUint8Array.buffer, "export-dataset.js", "application/javascript")
}