vue实现zip文件下载

 更新时间:2021年08月26日 17:12:15   作者:Explorer_S  
这篇文章主要为大家详细介绍了vue实现zip文件下载,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了vue实现zip文件下载的具体代码,供大家参考,具体内容如下

el-button按钮

<el-button size="mini" type="success" @click="downloadHandle(fileName, fileLocation)">下载</el-button>

js处理说明

request 拦截器 request.js

axios 引入并创建 axios 实例,request 拦截器添加

import axios from 'axios'


// 创建axios实例
const service = axios.create({
  baseURL: '',    // api的baseURL
  timeout: 20000, // 请求超时时间
  params: {
 // 请求参数
  }
});

// request拦截器
service.interceptors.request.use(config => {
  // .... config 添加处理
  ......
  
  return config
}

export default service

request 拦截器在请求前处理,可以添加 http headers 设置,例如:

1、HTTP Request Headers: token、cookie、session等值添加处理(config.headers[‘后台取值名称'] = ‘相关值';):

(1)config.headers[‘token'] = ‘token的值';
(2)config.headers[‘cookie'] = ‘cookie的值';
(3)config.headers[‘session'] = ‘session的值';

2、Headers post设置:如 Content-Type

上传文件使用:config.headers.post[‘Content-Type'] = ‘multipart/form-data';

zip文件下载

1、request.js 代码:

import axios from 'axios'


// 创建axios实例
const service = axios.create({
  baseURL: '',    // api的baseURL
  timeout: 20000, // 请求超时时间
  params: {
 // 请求参数
  }
});

// request拦截器
service.interceptors.request.use(config => {
  // config 添加 token 值
  config.headers['token'] = getToken();  // getToken()是我的获取值方法,系统校验使用
  return config
}

export default service

2、vue页面引用 request.js

import request from '@/utils/request'

下载处理

// fileName下载设置名称,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)
   })
},

后台处理

根据请求 /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);
            //设置Http响应头告诉浏览器下载文件名 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;
        }
    }

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Vue鼠标滚轮滚动切换路由效果的实现方法

    Vue鼠标滚轮滚动切换路由效果的实现方法

    这篇文章主要介绍了Vue鼠标滚轮滚动切换路由效果的实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-08-08
  • vue项目打包优化的方法实战记录

    vue项目打包优化的方法实战记录

    最近入职了新公司,接手了一个新拆分出来的Vue项目,针对该项目做了个打包优化,把经验分享出来,下面这篇文章主要给大家介绍了关于vue项目打包优化的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-08-08
  • 前端vue项目如何使用Decimal.js做加减乘除求余运算

    前端vue项目如何使用Decimal.js做加减乘除求余运算

    decimal.js是使用的二进制来计算的,可以更好地实现格化式数学运算,对数字进行高精度处理,使用decimal类型处理数据可以保证数据计算更为精确,这篇文章主要给大家介绍了关于前端vue项目如何使用Decimal.js做加减乘除求余运算的相关资料,需要的朋友可以参考下
    2024-05-05
  • element el-table如何实现表格动态增加/删除/编辑表格行(带校验规则)

    element el-table如何实现表格动态增加/删除/编辑表格行(带校验规则)

    这篇文章主要介绍了element el-table如何实现表格动态增加/删除/编辑表格行(带校验规则),本篇文章记录el-table增加一行可编辑的数据列,进行增删改,感兴趣的朋友跟随小编一起看看吧
    2024-07-07
  • 详解Vue3如何优雅的监听localStorage变化

    详解Vue3如何优雅的监听localStorage变化

    最近在研究框架,也仔细用了Vue3一些功能,所以本文就来和大家聊聊Vue3如何实现优雅的监听localStorage的变化,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-06-06
  • vue+elementUI封装一个根据后端变化的动态table(完整代码)

    vue+elementUI封装一个根据后端变化的动态table(完整代码)

    这篇文章主要介绍了vue+elementUI,封装一个根据后端变化的动态table,实现了自动生成和插槽两个方式,主要把el-table 和el-pagination封装在一起,结合示例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-08-08
  • vue实现将图像文件转换为base64

    vue实现将图像文件转换为base64

    这篇文章主要介绍了vue实现将图像文件转换为base64,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • Vue Computed中get和set的用法及Computed与watch的区别

    Vue Computed中get和set的用法及Computed与watch的区别

    这篇文章主要介绍了Vue Computed中get和set的用法及Computed与watch的区别,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • vue 实现强制类型转换 数字类型转为字符串

    vue 实现强制类型转换 数字类型转为字符串

    今天小编就为大家分享一篇vue 实现强制类型转换 数字类型转为字符串,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • KKFileView结合vue多格式文件在线预览功能实现

    KKFileView结合vue多格式文件在线预览功能实现

    kkFileView是git的开源在线文件预览项目,这篇文章主要介绍了KKFileView结合vue多格式文件在线预览功能,本文给大家介绍的非常详细,需要的朋友可以参考下
    2024-02-02

最新评论