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. 1755: N相关孪生素数

    #include<stdio.h>int f(int n,int L,int R){ int ch[10000],i,j,count=0; j=1; for(i=L;i<=R;i++ ...

  2. 《快乐编程大本营》java语言训练班 3课:java的运算符

    第1节. 算术运算符 第2节. 递增和递减运算符 第3节. 比较运算符 第4节. 逻辑运算符 第5节. 运算符优先级 第6节. 字符串运算 http://code6g.com/pxphp/px/ban ...

  3. [求解!!!] springboot在运行web项目时报错

    2017-05-10 17:40:54.343 INFO 4852 --- [ main] ationConfigEmbeddedWebApplicationContext : Refreshing ...

  4. 使用Gradle自动创建Java项目结构

    D:\N3verL4nd\Desktop\java>tree 卷 本地磁盘 的文件夹 PATH 列表 卷序列号为 00000200 0006:08B0 D:. ├─.gradle │ ├─3.4 ...

  5. C++输出中文字符

    注:本文转载自互联网,感谢作者整理!   1. cout 场景1: 在源文件中定义 const char* str = "中文" 在 VC++ 编译器上,由于Windows环境用 ...

  6. 自己封装的一个Ajax小框架

    在经历了Jsp实训的惨痛教训后,特意花了点时间学习Ajax,学完后自我感觉良好,于是写了如下一个小框架: /** * frameAjax * * 参数: * paramsObj: Json * req ...

  7. No

    1.为什么A/D转换前需要采样保持电路,它的基本原理是什么? 因为被取样的信号是动态,随时改变的,而A/D转换需要时间,在这个转换的过程中,信号是变化的,为了弥补A/D转换的时间差,所以需要采样保持. ...

  8. GitHub注册与Git安装

    注册GitHub GitHub官网 ☞☞☞☞[戳我] 一.打开,如下图所示, 按照要求进行注册. 安装Git Git官网下载☞☞☞☞ [戳我] 一.打开,根据自己的电脑系统选择不同的版本,这里主要是以 ...

  9. 洛谷P3177 [HAOI2015]树上染色(树形dp)

    题目描述 有一棵点数为 N 的树,树边有边权.给你一个在 0~ N 之内的正整数 K ,你要在这棵树中选择 K个点,将其染成黑色,并将其他 的N-K个点染成白色 . 将所有点染色后,你会获得黑点两两之 ...

  10. Docker容器到底是什么?

    Docker是一个开源的应用容器引擎,是近些年最火的技术之一,Docker公司从Docker项目开源之后发家致富把公司商标改为了Docker,收购了fit项目,整合为了docker-compose,前 ...