时间:2021-05-26
思路: 用 ajax 将文件下载, 然后用 jszip 压缩文件, 最后用 file-saver 生成文件
1. 准备工作
安装 3 个依赖: axios, jszip, file-saver
yarn add axiosyarn add jszipyarn add file-saver2. 下载文件
import axios from 'axios'const getFile = url => { return new Promise((resolve, reject) => { axios({ method:'get', url, responseType: 'arraybuffer' }).then(data => { resolve(data.data) }).catch(error => { reject(error.toString()) }) })}这里需要注意的是responseType, 如果下载文件是文本类型的(如: .txt, .js之类的), 那么用responseType: 'text'也可以, 但是如果下载的文件是图片, 视频之类的, 就得用arraybuffer
3. 打包文件
import JSZip from 'jszip'import FileSaver from 'file-saver'export default { methods: { handleBatchDownload() { const data = ['各类地址1', '各类地址2'] // 需要下载打包的路径, 可以是本地相对路径, 也可以是跨域的全路径 const zip = new JSZip() const cache = {} const promises = [] data.forEach(item => { const promise = getFile(item).then(data => { // 下载文件, 并存成ArrayBuffer对象 const arr_name = item.split("/") const file_name = arr_name[arr_name.length - 1] // 获取文件名 zip.file(file_name, data, { binary: true }) // 逐个添加文件 cache[file_name] = data }) promises.push(promise) }) Promise.all(promises).then(() => { zip.generateAsync({type:"blob"}).then(content => { // 生成二进制流 FileSaver.saveAs(content, "打包下载.zip") // 利用file-saver保存文件 }) }) }, },}4. 最终代码
import axios from 'axios'import JSZip from 'jszip'import FileSaver from 'file-saver'const getFile = url => { return new Promise((resolve, reject) => { axios({ method:'get', url, responseType: 'arraybuffer' }).then(data => { resolve(data.data) }).catch(error => { reject(error.toString()) }) })}export default { render(h) { return (<a on-click={ () => this.handleBatchDownload() } href="javascript:;" rel="external nofollow" >批量下载</a>) }, methods: { handleBatchDownload() { const data = ['各类地址1', '各类地址2'] // 需要下载打包的路径, 可以是本地相对路径, 也可以是跨域的全路径 const zip = new JSZip() const cache = {} const promises = [] data.forEach(item => { const promise = getFile(item).then(data => { // 下载文件, 并存成ArrayBuffer对象 const arr_name = item.split("/") const file_name = arr_name[arr_name.length - 1] // 获取文件名 zip.file(file_name, data, { binary: true }) // 逐个添加文件 cache[file_name] = data }) promises.push(promise) }) Promise.all(promises).then(() => { zip.generateAsync({type:"blob"}).then(content => { // 生成二进制流 FileSaver.saveAs(content, "打包下载.zip") // 利用file-saver保存文件 }) }) }, },}注意:
如果下载的文件过大, 打包的时间将会很长, 甚至可能会导致浏览器奔溃
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
vue将文件/图片批量打包下载各种格式都可以,只要url能够打开或者下载文件即可.1.通过文件的url,使用js的XMLHttpRequest获取blob2.将
文件下载时,我们可能需要一次下载多个文件。批量下载文件时,需要将多个文件打包为zip,然后再下载。实现思路有两种:一是将所有文件先打包压缩为一个文件,然后下载这
关于startService的基本使用概述及其生命周期可参见《Android中startService基本使用方法概述》。本文通过批量下载文件的简单示例,演示s
springboot整合vue实现上传下载文件,供大家参考,具体内容如下环境springboot1.5.x完整代码下载:springboot整合vue实现上传下
hdfs文件操作操作示例,包括上传文件到HDFS上、从HDFS上下载文件和删除HDFS上的文件,大家参考使用吧复制代码代码如下:importorg.apache