一、引言

公司新架构项目第一期已经算封版了,小编使用Vue也算略有小成 ???

Vue的一些基本的操作和组件小编就不一一介绍了,官方文档写的很详细啦,小编主要针对一下常用的功能以及坑进行记录。

那么今天来看下怎么使用Vue请求后台实现文件下载!

二、前提要求

1、首先要保证前后端能够正常访问,最经典一般就是跨域问题导致访问不了,

2、对Vue以及axios使用有基本了解

三、前端项目实现请求后台

步骤一:安装axios组件,一般使用命令:npm install axios --save

步骤二:为了项目规范整洁,把一些常用的请求方式放在了一个文件中包括GET、POST等等,以及配置请求后台统一前缀,代码如下(文件在src/libs/axios)

import axios from 'axios';

// 统一请求路径前缀,这个是后台接口地址
var base = 'http://127.0.0.1:8080';

// 超时设定
axios.defaults.timeout = 15000;
axios.defaults.withCredentials = true;

//get 请求
export const getRequest = (url, params) => {
    return axios({
        method: 'get',
        url: `${base}${url}`,
        params: params,
        headers: {

        }
    });
};

// post请求
export const postRequest = (url, params) => {
    return axios({
        method: 'post',
        url: `${base}${url}`,
        data: params,
        transformRequest: [function (data) {
            let ret = '';
            for (let it in data) {
                ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&';
            }
            return ret;
        }],
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded',
        }
    });
};

// 文件导出
export const exportFileRequest = (url, params) => {
  return axios({
    method: 'get',
    url: `${base}${url}`,
    params: params,
    responseType: 'blob',
    headers: {
    }
  });
};

步骤三:编写统一存放API地址文件,并且传参数指定请求方式(文件在src/api/index):

// 导入定义请求方式
import {getRequest,postRequest,exportFileRequest} from '@/libs/axios'

// 统一存放请求后台API地址

// 导出Excel文件
export const exportExcel = (params) => {
   return exportFileRequest("/exportExcel",params)
}

// 下载本地固定文件
export const exportFile = (params) => {
  return exportFileRequest("/exportFile",params)
}

步骤四:Vue页面调用API接口,并且实现文件下载

<template>
  <div>
    <button v-on:click="download">下载Excel</button>
  </div>
</template>
<script>
  // 引入需要使用的API
  import {exportExcel} from '@/api/index'

  export default {
    name: 'FileDownLoad',
    methods: {
      // 下载Excel
      download() {
        exportExcel().then(response => {
          console.log(response);
          this.downloadFile(response.data);
        })
      },
      downloadFile(data) {
        // 文件导出
        if (!data) {
          return
        }
        let url = window.URL.createObjectURL(new Blob([data]));
        let link = document.createElement('a');
        link.style.display = 'none';
        link.href = url;
        link.setAttribute('download', '测试excel.xls');

        document.body.appendChild(link);
        link.click()
      }
    }
  }
</script>

五、后台导出文件代码

    /**
     * 导出excel
     * @param response
     */
    @GetMapping("/exportExcel")
    public void fileDownLoad(HttpServletResponse response) {
        HSSFWorkbook hssfWorkbook = new HSSFWorkbook();
        HSSFSheet sheet = hssfWorkbook.createSheet("sheet");
        // 一个创建excel标题的的自定义方法,如需要,请下载案例查看
        createTitle(hssfWorkbook, sheet);
        try {
            response.setContentType("application/vnd.ms-excel;charset=UTF-8");
            response.setCharacterEncoding("UTF-8");
            response.setHeader("Content-Disposition", "attachment;filename=" +
                    java.net.URLEncoder.encode("测试.xls", "UTF-8"));
            OutputStream outputStream = response.getOutputStream();
            hssfWorkbook.write(outputStream);
            outputStream.flush();
            outputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

 

六、案例下载

前后端案例已上传CSDN,需要的小伙伴:点击下载

针对以上案例如有问题,欢迎留言!

如果有帮助到你,点赞转发评论6666 !!!  ???

Logo

前往低代码交流专区

更多推荐