1、后台

1.1 ResponseBean 返回封装的格式

@Data
@Accessors(chain = true)
public class ResponseBean {
private String retCode;
private String retMsg;
private Map<Object, Object> retMap; }

  1.2请求封装的格式

@Data
@Accessors(chain = true)
public class RequestBean {
private Map sysMap;
private List<Object> parameterList; }

  1.3后台服务接口

package com.test.demo.controller;

import com.test.demo.common.RequestBean;
import com.test.demo.common.ResponseBean;
import com.test.demo.common.RetCode;
import com.test.demo.util.FileUtil;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects; /**
* @description: 文件相关
* @author: ZhuGaoPo
* @version:1.0
*/
@Slf4j
@RequestMapping(value = "/file")
@RestController
public class FileController { @PostMapping(value = "/downloadFile")
@ApiOperation("文件下载到本地")
public ResponseBean downloadFile(@RequestBody RequestBean requestBean) {
log.info("接收到的数据为:" + requestBean);
ResponseBean response = new ResponseBean();
String filePath = String.valueOf(requestBean.getParameterList().get(0));
BufferedReader br = null;
try {
br = new BufferedReader(new InputStreamReader(new FileInputStream(filePath), "GBK"));
StringBuilder stringBuilder = new StringBuilder();
String line;
while ((line = br.readLine()) != null) {
stringBuilder.append(line).append('\n');
}
response.setRetCode(RetCode.SUCCESS);
Map<Object, Object> retMap = new HashMap<>(RetCode.MAP_SIZE);
retMap.put("data", stringBuilder.toString());
response.setRetMap(retMap);
} catch (Exception e) {
response.setRetCode(RetCode.FAIL);
log.error("下载模板失败", e);
} finally {
try {
Objects.requireNonNull(br).close();
} catch (IOException e) {
e.printStackTrace();
}
}
log.info("返回的数据为:" + response);
return response;
}
}

  2、前台

             <el-button type="warning" plain @click="downloadFile()">
下载
</el-button>

  

 downloadFile() {
//filePath为文件服务的路径
const data = {
sysMap: {
features: '下载模板'
},
parameterList: [this.filePath]
}
this.$request({
url: '/file/downloadFile',
method: 'post',
data
}).then(res => {
if (res.retCode === 'IF0000') {
// 成功、加上 ‘\ufeff’ 解决导出 csv 乱码问题
const blob = new Blob(['\ufeff' + res.retMap.data], { type: 'application/json;charset=UTF-8' })
const a = document.createElement('a')
// 指定下载的文件名
a.download = '黑名单模板.csv'
// URL对象
a.href = URL.createObjectURL(blob)
// 模拟点击
a.click()
} else {
return false
}
}).catch(e => {})
},

  

文件下载(download) 前后台备注自用的更多相关文章

  1. lumen Response

    1.基本响应 所有路由和控制器都会返回某种被发送到用户浏览器的响应,Lumen提供了多种不同的方式来返回响应,最基本的响应就是从路由或控制器返回一个简单的字符串: $app->get('/', ...

  2. laravel框架总结(一) -- 请求和响应

    一.laravel请求 1.获取请求 1>获取请求的 URI path 方法会返回请求的 URI.所以,如果接收到的请求目标是 http://domain.com/foo/bar,那么 path ...

  3. iOS - Alamofire 网络请求

    前言 Alamofire 是 Swift 语言的 HTTP 网络开发工具包,相当于 Swift 实现 AFNetworking 版本.当然,AFNetworking 非常稳定,在 Mac OSX 与 ...

  4. HTTP层 —— 响应

    1.创建响应 字符串&数组 所有路由和控制器都会返回一个被发送到用户浏览器的响应,Laravel 提供了多种不同的方式来返回响应,最基本的响应就是从路由或控制器返回一个简单的字符串,框架会将这 ...

  5. JspSmart文件上传与下载

    JspSmart 文件上传包,放在WEB-INF/lib下 uploadForm.jsp <%@ page language="java" import="java ...

  6. 使用Putty执行Rsync命令

    背景介绍:公司的文件服务器有多个,一个Master服务器,10个左右的Slave服务器. 当Master服务器中的文件更新之后,Slave服务器中的文件也必须做相对应的同步操作. 公司目前使用的Rsy ...

  7. 5. 文件上传下载 与 db数据库

    文件上传 formidable multer npm i formidable multer 如何使用见: https://www.npmjs.com/ util.inspect 自己查 文件上传:表 ...

  8. lumen

    HTTP路由 基本路由 路由参数 必填参数 可选参数 正则表达式约束 命名路由 路由组 中间件 命令空间 路由前缀 基本路由 你可以在 route/web.php 文件中定义应用程序的全部路由.最基本 ...

  9. 【jsPDF】jsPDF插件实现将html页面转换成PDF,并下载,支持分页

    1.目的:在前段是 jQuery库 或者 VUE库 或者两者混合库,将html 页面和数据 转换成PDF格式并下载,支持分页 1.项目背景: 对客户报修记录进行分类统计,并生成各种饼图.柱状图.线性图 ...

随机推荐

  1. 2020年大厂Java面试题(基础+框架+系统架构+分布式+实战)

    前言 作为一个Java开发者,Java架构师应该是大家的一个职业目标了吧. 要成为Java架构师,首先你要是一个高级Java工程师,熟练使用各种框架,并知道它们实现的原理.jvm虚拟机原理.调优,懂得 ...

  2. 024.Python模块OS模块

    一 OS模块 对系统进行操作 1.1 popen 可以把运行的结果,这个字符串转化成utf-8这样的编码格式在进行输出 import os res = os.popen("ifconfig& ...

  3. 5.场景3:高可用性使用分布式虚拟路由(DVR)

    这个场景描述了使用ML2插件和Open vSwitch的OpenStack网络服务的高可用性分布式虚拟路由(DVR)实现.示例配置创建了一个Flat外部网络和一个VXLAN项目(租户)网络.然而,这种 ...

  4. MySQL初次安装配置及修改密码

    安装前的准备工作: 下载完后,我们将 zip 包解压到相应的目录,这里我将解压后的文件夹放在 C:\mysql-8.0.11 下. 接下来我们需要配置下 MySQL 的配置文件 打开刚刚解压的文件夹 ...

  5. Mongodb 3.2.8: 集群环境搭建

    简介 MongoDB是一种面向文档的数据库管理系统,由C++撰写而成,以此来解决应用程序开发社区中的大量现实问题.2007年10月,MongoDB由10gen团队所发展.2009年2月首度推出. ## ...

  6. DRF框架的安装与使用

    目录 DRF框架的安装与配置 基于restful接口规范的接口设计 DRF框架的安装与配置 """ 1)安装 >: pip install djangorestfr ...

  7. 【UEFI】--- 探究BIOS NvRam空间的的位置以及大小

    按照国际惯例--先上问题:1. 什么是NvRam空间,里面存储了什么数据 2. 如何找到NvRam空间在BIOS-bin文件中的位置 NvRam空间的学名为: Non-Volatile Ram即非易失 ...

  8. php 搭建webSocket

    <?php //2.设计一个循环挂起WebSocket通道,进行数据的接收.处理和发送 //对创建的socket循环进行监听,处理数据 function run(){ //死循环,直到socke ...

  9. ORB-SLAM2 论文&代码学习 —— 概览

    转载请注明出处,谢谢 原创作者:MingruiYU 原创链接:https://www.cnblogs.com/MingruiYu/p/12347171.html *** 本文要点: ORB-SLAM2 ...

  10. LeetCode29 Medium 不用除号实现快速除法

    本文始发于个人公众号:TechFlow,原创不易,求个关注 链接 Divide Two Integers 难度 Medium 描述 给定两个整数,被除数和除数,要求在不使用除号的情况下计算出两数的商 ...