简介
前端下载文件是一个非常常见的需求,但由于浏览器的安全策略的限制,我们通常只能通过一个额外的页面,访问某个文件的 url 来实现下载功能,但是这种用户体验非常不好。
不过HTML5提供了download的属性。
1 | <a href="http://somehost/somefile.zip" download="filename.zip">下载文件</a> |
上面的例子就是HTML5下载文件 添加download属性 下载的文件名就为filename.zip
当然我们也可以使用javascript来进行操作
1 | var a = document.createElement('a'); |
window.URL
window.url中有两个方法
- createObjectURL: 用 blob 对象来创建一个 object URL(它是一个 DOMString),我们可以用这个 object URL 来表示某个 blob 对象,这个 object URL 可以用在 href 和 src 之类的属性上。
- revokeObjectURL: 释放由 createObjectURL 创建的 object URL,当该 object URL 不需要的时候,我们要主动调用这个方法来获取最佳性能和内存使用。
知道了这两个方法之后,我们再回去看看上面的例子就很容易理解了吧!只是用 blob 对象来创建一条 URL,然后让 a 标签引用该 URL,然后触发个点击事件,就可以下载文件了。
Blob 对象
Blob 全称是 Binary large object,它表示一个类文件对象,可以用它来表示一个文件。根据 MDN 上面的说法,File API 也是基于 blob 来实现的。
我们接下来用fetch的方式来实现刚才的下载代码
1 |
|