学习笔记:前端下载流文件

175 阅读1分钟

需求背景

在实际开发中,下载excel、pdf的场景非常多,有时候服务端比较贴心,会将完整的url传给前端,然后前端直接window.open或者动态生成a标签直接点击,这样会直接使用浏览器提功能文件下载能力,前端不用考虑流相关的东西。而这次服务端是通过post接口,并且直接返回流文件给我,搞得我一时有点懵逼,好在还是找到了解决问题的方式,在此记录一下,加深印象。

实现方式

const handleClickDownload = async () => {
     const blob = await networkService.post({
        url: Api.seo.downloadLongTailKeywordRegion
      });
    handleDownFile('长尾词列表', blob);
};

将接受到的流处理成文件的方法

const handleDownFile = useCallback((fileName, blob) => {
  const aLink = document.createElement('a');
  const objURL = window.URL.createObjectURL(new Blob([blob], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' })); // xlsx格式
  
  aLink.download = fileName;
  aLink.href = objURL;
  aLink.click();
  
  window.URL.revokeObjectURL(objURL);
}, []);

希望对大家能有点帮助