vue實現(xiàn)zip文件下載
本文實例為大家分享了vue實現(xiàn)zip文件下載的具體代碼,供大家參考,具體內(nèi)容如下
el-button按鈕
<el-button size="mini" type="success" @click="downloadHandle(fileName, fileLocation)">下載</el-button>
js處理說明
request 攔截器 request.js
axios 引入并創(chuàng)建 axios 實例,request 攔截器添加
import axios from 'axios' // 創(chuàng)建axios實例 const service = axios.create({ baseURL: '', // api的baseURL timeout: 20000, // 請求超時時間 params: { // 請求參數(shù) } }); // request攔截器 service.interceptors.request.use(config => { // .... config 添加處理 ...... return config } export default service
request 攔截器在請求前處理,可以添加 http headers 設(shè)置,例如:
1、HTTP Request Headers: token、cookie、session等值添加處理(config.headers[‘后臺取值名稱'] = ‘相關(guān)值';):
(1)config.headers[‘token'] = ‘token的值';
(2)config.headers[‘cookie'] = ‘cookie的值';
(3)config.headers[‘session'] = ‘session的值';
2、Headers post設(shè)置:如 Content-Type
上傳文件使用:config.headers.post[‘Content-Type'] = ‘multipart/form-data';
zip文件下載
1、request.js 代碼:
import axios from 'axios' // 創(chuàng)建axios實例 const service = axios.create({ baseURL: '', // api的baseURL timeout: 20000, // 請求超時時間 params: { // 請求參數(shù) } }); // request攔截器 service.interceptors.request.use(config => { // config 添加 token 值 config.headers['token'] = getToken(); // getToken()是我的獲取值方法,系統(tǒng)校驗使用 return config } export default service
2、vue頁面引用 request.js
import request from '@/utils/request'
下載處理
// fileName下載設(shè)置名稱,fileLocation文件存儲名稱 downloadHandle(fileName,fileLocation) { let prome = { fileLocation: fileLocation } request.post( '/api/downloadFile', prome, { responseType: 'blob', timeout: 60000 } ).then(response => { if (!response.size) { this.$message({ message: '沒有可下載文件', type: 'warning' }) return } const url = window.URL.createObjectURL(new Blob([response])) const link = window.document.createElement('a') link.style.display = 'none' link.href = url link.setAttribute('download', fileName+'.zip') document.body.appendChild(link) link.click() }).catch((data) => { console.log(data) }) },
后臺處理
根據(jù)請求 /api/downloadFile 后臺 Java API 處理
package com.web.controller; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.FileInputStream; import java.io.OutputStream; import java.net.URLEncoder; import java.util.Map; @RestController @RequestMapping("/api") public class DownloadFileDemo { /** * 文件下載 * @param tranNap * @param request * @param response */ @RequestMapping(value = "/downloadFile") public void downloadFile(@RequestBody Map<String, Object> tranNap, HttpServletRequest request, HttpServletResponse response) { String fileLocation = tranNap.get("fileLocation")+""; try { String filePath = "D:/file/" + fileLocation + ".zip"; //得到該文件 File file = new File(filePath); if (!file.exists()) { System.out.println("[文件下載]沒有可下載的文件"); return; } FileInputStream fileInputStream = new FileInputStream(file); //設(shè)置Http響應(yīng)頭告訴瀏覽器下載文件名 Filename response.setHeader("Content-Disposition", "attachment;Filename=" + URLEncoder.encode(fileLocation+".zip", "UTF-8")); OutputStream outputStream = response.getOutputStream(); byte[] bytes = new byte[2048]; int len = 0; while ((len = fileInputStream.read(bytes)) > 0) { outputStream.write(bytes, 0, len); } fileInputStream.close(); outputStream.close(); } catch (Exception e) { System.out.println("[文件下載]下載文件異常"); e.printStackTrace(); return; } } }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Vue鼠標(biāo)滾輪滾動切換路由效果的實現(xiàn)方法
這篇文章主要介紹了Vue鼠標(biāo)滾輪滾動切換路由效果的實現(xiàn)方法,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-08-08前端vue項目如何使用Decimal.js做加減乘除求余運算
decimal.js是使用的二進制來計算的,可以更好地實現(xiàn)格化式數(shù)學(xué)運算,對數(shù)字進行高精度處理,使用decimal類型處理數(shù)據(jù)可以保證數(shù)據(jù)計算更為精確,這篇文章主要給大家介紹了關(guān)于前端vue項目如何使用Decimal.js做加減乘除求余運算的相關(guān)資料,需要的朋友可以參考下2024-05-05element el-table如何實現(xiàn)表格動態(tài)增加/刪除/編輯表格行(帶校驗規(guī)則)
這篇文章主要介紹了element el-table如何實現(xiàn)表格動態(tài)增加/刪除/編輯表格行(帶校驗規(guī)則),本篇文章記錄el-table增加一行可編輯的數(shù)據(jù)列,進行增刪改,感興趣的朋友跟隨小編一起看看吧2024-07-07詳解Vue3如何優(yōu)雅的監(jiān)聽localStorage變化
最近在研究框架,也仔細用了Vue3一些功能,所以本文就來和大家聊聊Vue3如何實現(xiàn)優(yōu)雅的監(jiān)聽localStorage的變化,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-06-06vue+elementUI封裝一個根據(jù)后端變化的動態(tài)table(完整代碼)
這篇文章主要介紹了vue+elementUI,封裝一個根據(jù)后端變化的動態(tài)table,實現(xiàn)了自動生成和插槽兩個方式,主要把el-table 和el-pagination封裝在一起,結(jié)合示例代碼給大家介紹的非常詳細,需要的朋友可以參考下2022-08-08vue實現(xiàn)將圖像文件轉(zhuǎn)換為base64
這篇文章主要介紹了vue實現(xiàn)將圖像文件轉(zhuǎn)換為base64,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-02-02Vue Computed中g(shù)et和set的用法及Computed與watch的區(qū)別
這篇文章主要介紹了Vue Computed中g(shù)et和set的用法及Computed與watch的區(qū)別,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-11-11vue 實現(xiàn)強制類型轉(zhuǎn)換 數(shù)字類型轉(zhuǎn)為字符串
今天小編就為大家分享一篇vue 實現(xiàn)強制類型轉(zhuǎn)換 數(shù)字類型轉(zhuǎn)為字符串,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11KKFileView結(jié)合vue多格式文件在線預(yù)覽功能實現(xiàn)
kkFileView是git的開源在線文件預(yù)覽項目,這篇文章主要介紹了KKFileView結(jié)合vue多格式文件在線預(yù)覽功能,本文給大家介紹的非常詳細,需要的朋友可以參考下2024-02-02