Vue 中批量下载文件并打包的示例代码
思路:用ajax将文件下载,然后用jszip压缩文件,最后用file-saver生成文件
1.准备工作
安装3个依赖:axios,jszip,file-saver
yarnaddaxios yarnaddjszip yarnaddfile-saver
2.下载文件
importaxiosfrom'axios'
constgetFile=url=>{
returnnewPromise((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.打包文件
importJSZipfrom'jszip'
importFileSaverfrom'file-saver'
exportdefault{
methods:{
handleBatchDownload(){
constdata=['各类地址1','各类地址2']//需要下载打包的路径,可以是本地相对路径,也可以是跨域的全路径
constzip=newJSZip()
constcache={}
constpromises=[]
data.forEach(item=>{
constpromise=getFile(item).then(data=>{//下载文件,并存成ArrayBuffer对象
constarr_name=item.split("/")
constfile_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.最终代码
importaxiosfrom'axios'
importJSZipfrom'jszip'
importFileSaverfrom'file-saver'
constgetFile=url=>{
returnnewPromise((resolve,reject)=>{
axios({
method:'get',
url,
responseType:'arraybuffer'
}).then(data=>{
resolve(data.data)
}).catch(error=>{
reject(error.toString())
})
})
}
exportdefault{
render(h){
return(this.handleBatchDownload()}href="javascript:;"rel="externalnofollow">批量下载)
},
methods:{
handleBatchDownload(){
constdata=['各类地址1','各类地址2']//需要下载打包的路径,可以是本地相对路径,也可以是跨域的全路径
constzip=newJSZip()
constcache={}
constpromises=[]
data.forEach(item=>{
constpromise=getFile(item).then(data=>{//下载文件,并存成ArrayBuffer对象
constarr_name=item.split("/")
constfile_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保存文件
})
})
},
},
}
注意:
如果下载的文件过大,打包的时间将会很长,甚至可能会导致浏览器奔溃
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。