vue實(shí)現(xiàn)zip文件下載
本文實(shí)例為大家分享了vue實(shí)現(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 實(shí)例,request 攔截器添加
import axios from 'axios'
// 創(chuàng)建axios實(shí)例
const service = axios.create({
baseURL: '', // api的baseURL
timeout: 20000, // 請求超時(shí)時(shí)間
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[‘后臺(tái)取值名稱'] = ‘相關(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實(shí)例
const service = axios.create({
baseURL: '', // api的baseURL
timeout: 20000, // 請求超時(shí)時(shí)間
params: {
// 請求參數(shù)
}
});
// request攔截器
service.interceptors.request.use(config => {
// config 添加 token 值
config.headers['token'] = getToken(); // getToken()是我的獲取值方法,系統(tǒng)校驗(yàn)使用
return config
}
export default service
2、vue頁面引用 request.js
import request from '@/utils/request'
下載處理
// fileName下載設(shè)置名稱,fileLocation文件存儲(chǔ)名稱
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)
})
},
后臺(tái)處理
根據(jù)請求 /api/downloadFile 后臺(tái) 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)滾輪滾動(dòng)切換路由效果的實(shí)現(xiàn)方法
這篇文章主要介紹了Vue鼠標(biāo)滾輪滾動(dòng)切換路由效果的實(shí)現(xiàn)方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-08-08
vue項(xiàng)目打包優(yōu)化的方法實(shí)戰(zhàn)記錄
最近入職了新公司,接手了一個(gè)新拆分出來的Vue項(xiàng)目,針對該項(xiàng)目做了個(gè)打包優(yōu)化,把經(jīng)驗(yàn)分享出來,下面這篇文章主要給大家介紹了關(guān)于vue項(xiàng)目打包優(yōu)化的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08
前端vue項(xiàng)目如何使用Decimal.js做加減乘除求余運(yùn)算
decimal.js是使用的二進(jìn)制來計(jì)算的,可以更好地實(shí)現(xiàn)格化式數(shù)學(xué)運(yùn)算,對數(shù)字進(jìn)行高精度處理,使用decimal類型處理數(shù)據(jù)可以保證數(shù)據(jù)計(jì)算更為精確,這篇文章主要給大家介紹了關(guān)于前端vue項(xiàng)目如何使用Decimal.js做加減乘除求余運(yùn)算的相關(guān)資料,需要的朋友可以參考下2024-05-05
element el-table如何實(shí)現(xiàn)表格動(dòng)態(tài)增加/刪除/編輯表格行(帶校驗(yàn)規(guī)則)
這篇文章主要介紹了element el-table如何實(shí)現(xiàn)表格動(dòng)態(tài)增加/刪除/編輯表格行(帶校驗(yàn)規(guī)則),本篇文章記錄el-table增加一行可編輯的數(shù)據(jù)列,進(jìn)行增刪改,感興趣的朋友跟隨小編一起看看吧2024-07-07
詳解Vue3如何優(yōu)雅的監(jiān)聽localStorage變化
最近在研究框架,也仔細(xì)用了Vue3一些功能,所以本文就來和大家聊聊Vue3如何實(shí)現(xiàn)優(yōu)雅的監(jiān)聽localStorage的變化,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-06-06
vue+elementUI封裝一個(gè)根據(jù)后端變化的動(dòng)態(tài)table(完整代碼)
這篇文章主要介紹了vue+elementUI,封裝一個(gè)根據(jù)后端變化的動(dòng)態(tài)table,實(shí)現(xiàn)了自動(dòng)生成和插槽兩個(gè)方式,主要把el-table 和el-pagination封裝在一起,結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08
vue實(shí)現(xiàn)將圖像文件轉(zhuǎn)換為base64
這篇文章主要介紹了vue實(shí)現(xiàn)將圖像文件轉(zhuǎn)換為base64,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02
Vue Computed中g(shù)et和set的用法及Computed與watch的區(qū)別
這篇文章主要介紹了Vue Computed中g(shù)et和set的用法及Computed與watch的區(qū)別,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11
vue 實(shí)現(xiàn)強(qiáng)制類型轉(zhuǎn)換 數(shù)字類型轉(zhuǎn)為字符串
今天小編就為大家分享一篇vue 實(shí)現(xiàn)強(qiáng)制類型轉(zhuǎn)換 數(shù)字類型轉(zhuǎn)為字符串,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11
KKFileView結(jié)合vue多格式文件在線預(yù)覽功能實(shí)現(xiàn)
kkFileView是git的開源在線文件預(yù)覽項(xiàng)目,這篇文章主要介紹了KKFileView結(jié)合vue多格式文件在線預(yù)覽功能,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2024-02-02

