downloadBlob / downloadText / downloadByUrl
downloadBlob、downloadText 和 downloadByUrl 三个函数用于在浏览器中触发文件下载。downloadBlob 用于下载 Blob 数据,downloadText 用于下载文本内容,downloadByUrl 用于通过远程地址下载文件。
语法
javascript
downloadBlob(blob, name)
downloadText(text, name)
downloadByUrl(url, name)参数
downloadBlob
blobBlob- 要下载的 Blob 对象。
namestring- 下载的文件名(包括扩展名)。
downloadText
textstring- 要下载的文本内容。
namestring- 下载的文件名(包括扩展名)。
downloadByUrl
urlstring- 远程文件地址。
namestring- 下载保存的文件名(包括扩展名)。
返回值
downloadBlobundefineddownloadTextundefineddownloadByUrlPromise<undefined>
downloadByUrl 为异步函数,内部需先请求获取文件再触发下载。
描述
downloadBlob 通过 URL.createObjectURL 创建 Blob 的临时下载链接,生成 <a> 标签并设置 download 属性后挂载到文档中触发点击下载,最后在 100ms 后移除链接并调用 URL.revokeObjectURL 释放内存。
downloadText 先将文本包装为 new Blob([text], { type: 'text/plain' }),再使用与 downloadBlob 类似的方式触发下载。
downloadByUrl 内部调用了 requestFile 通过 axios 请求获取远程文件为 File 对象,再调用 downloadBlob 触发下载。这种方式相比直接使用 <a> 标签下载可以更好地约束下载格式,在微前端等场景下更可靠。
注意事项
- 三个函数均依赖
<a>标签的download属性触发下载,跨域资源下载时浏览器可能忽略download文件名而使用原 URL 的文件名。 downloadByUrl依赖 axios,且目标地址需支持跨域访问或同源访问,否则请求会被浏览器拦截。- 函数内部通过
setTimeout延迟 100ms 清理资源,确保下载已开始;短时间内大量下载可能产生临时 URL,建议合理控制调用频率。 downloadText生成的 Blob MIME 类型固定为text/plain,若需下载其他格式请使用downloadBlob。- 在非用户交互上下文中调用下载可能被浏览器拦截,建议在点击事件回调中调用。
示例
下载 Blob
下载文本
通过 URL 下载
浏览器兼容性
- 三个函数均依赖浏览器 DOM API 和
URL.createObjectURL,可在所有现代浏览器中使用。 <a>标签的download属性在 IE 不被支持,建议在 Chrome、Firefox、Edge、Safari 等现代浏览器中使用。URL.createObjectURL在 IE10+ 及所有现代浏览器中可用。
性能考虑
- 时间复杂度:
downloadBlob与downloadText为 O(1);downloadByUrl取决于网络请求耗时。 - 内存管理:
URL.createObjectURL创建的对象 URL 会占用内存,函数内部已通过setTimeout调用URL.revokeObjectURL释放。 - 频繁下载会创建临时
<a>元素并触发重排,建议合并下载场景以减少 DOM 操作。
相关函数
requestFile / requestJSON- 通过请求从服务器读取文件(downloadByUrl内部调用requestFile)file2Json / json2Blob / toBase64- 文件格式转换chooseFile- 通过文件资源管理器选择本地文件