国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

Vue 中批量下載文件并打包的示例代碼

2019-11-19 14:54:16
字體:
來源:轉載
供稿:網友

思路: 用 ajax 將文件下載, 然后用 jszip 壓縮文件, 最后用 file-saver 生成文件

1. 準備工作

安裝 3 個依賴: axios, jszip, file-saver

yarn add axiosyarn add jszipyarn 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保存文件  })  }) }, },}

注意:

如果下載的文件過大, 打包的時間將會很長, 甚至可能會導致瀏覽器奔潰

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 武邑县| 通河县| 丹寨县| 驻马店市| 克拉玛依市| 饶阳县| 大方县| 外汇| 新巴尔虎右旗| 江山市| 嵩明县| 丽江市| 安顺市| 轮台县| 通辽市| 龙州县| 仙游县| 乌鲁木齐县| 额尔古纳市| 隆林| 葵青区| 祁门县| 拜泉县| 保定市| 绩溪县| 绵阳市| 收藏| 大邑县| 垦利县| 维西| 曲周县| 泰顺县| 微山县| 黔西| 东乡县| 牡丹江市| 襄汾县| 盱眙县| 山阳县| 华蓥市| 海阳市|