背景:最近需要根据后段返回内容生成一个txt文件(UTF-8编码)在前端可下载。尝试了几种方式,情况如下:
1. a标签下载
使用:
<a href="url" download="fileName"> //url为要下载的内容地址,fileName为生成的文件地址
问题:
- url同源的情况下:浏览器直接下载
- url不同源:浏览器则会预览:打开它能打开的文件类型,比如音频,txt文件等,而excel等文件打不开的,才会启动下载。
但我们并不希望文件被预览,而用户还需要在打开的页面上多执行一步下载的操作。所以不考虑这个办法。
2. window.open(fileUrl)
具体的使用更依赖后端,是后端已经生成好了文件而前端直接window.open(fileUrl)即可,在目前的实践中下载的情况与a标签相同,分为同源与不同源的下载。
3. FileSaver.js库
一个封装好了并解决了兼容问题的库,原理是使用创建一个隐藏的a标签进行下载,并且对数据的处理已经集成好,可以下载blob,cancas等多种格式。
但我使用过程中还是没有达到要求:在mac与windows下使用FileSaver.js时生成的txt文件并不相同。
mac下生成的文件: