您好,登錄后才能下訂單哦!
使用Vue如何批量下載文件?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
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如何批量下載文件的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。