zhengyiming
2025-06-10 e47c70d32e6fa7c9cb16ca19a79338ea36a83e94
apps/taro/src/utils/file.ts
@@ -86,3 +86,38 @@
    return fileName;
  });
}
export function downloadBase64File(base64Data: string, filename: string) {
  // 将base64数据分割,获取mime-type
  const [, mime, b64data] = base64Data.match(/^data:([^;]+);base64,(.+)$/);
  // 解码base64数据
  const byteString = atob(b64data);
  const arrayBuffer = new ArrayBuffer(byteString.length);
  const intArray = new Uint8Array(arrayBuffer);
  for (let i = 0; i < byteString.length; i++) {
    intArray[i] = byteString.charCodeAt(i);
  }
  // 创建Blob对象
  const blob = new Blob([intArray], { type: mime });
  //@ts-ignore
  if (typeof navigator !== 'undefined' && navigator.msSaveOrOpenBlob) {
    //@ts-ignore 兼容IE
    navigator.msSaveOrOpenBlob(blob, filename);
  } else {
    // 创建一个临时的a标签用于触发下载
    const a = document.createElement('a');
    const url = window.URL.createObjectURL(blob);
    a.href = url;
    a.download = filename; // 设置下载后的文件名
    document.body.appendChild(a);
    a.click(); // 触发下载
    document.body.removeChild(a);
    setTimeout(() => {
      window.URL.revokeObjectURL(url); // 清除创建的对象URL
    }, 0);
  }
}