最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

Vue 中批量下载文件并打包的示例代码

来源:懂视网 责编:小采 时间:2020-11-27 22:25:14
文档

Vue 中批量下载文件并打包的示例代码

Vue 中批量下载文件并打包的示例代码:思路: 用 ajax 将文件下载, 然后用 jszip 压缩文件, 最后用 file-saver 生成文件 1. 准备工作 安装 3 个依赖: axios, jszip, file-saver yarn add axios yarn add jszip yarn add file-saver 2. 下载文件 import
推荐度:
导读Vue 中批量下载文件并打包的示例代码:思路: 用 ajax 将文件下载, 然后用 jszip 压缩文件, 最后用 file-saver 生成文件 1. 准备工作 安装 3 个依赖: axios, jszip, file-saver yarn add axios yarn add jszip yarn add file-saver 2. 下载文件 import

思路: 用 ajax 将文件下载, 然后用 jszip 压缩文件, 最后用 file-saver 生成文件

1. 准备工作

安装 3 个依赖: axios, jszip, file-saver

yarn add axios
yarn add jszip
yarn add file-saver

2. 下载文件

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保存文件
 })
 })
 },
 },
}

注意:

如果下载的文件过大, 打包的时间将会很长, 甚至可能会导致浏览器奔溃

文档

Vue 中批量下载文件并打包的示例代码

Vue 中批量下载文件并打包的示例代码:思路: 用 ajax 将文件下载, 然后用 jszip 压缩文件, 最后用 file-saver 生成文件 1. 准备工作 安装 3 个依赖: axios, jszip, file-saver yarn add axios yarn add jszip yarn add file-saver 2. 下载文件 import
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top