后端:
1.依赖:
<!--easyPOI依赖-->
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-spring-boot-starter</artifactId>
<version>4.1.3</version>
<exclusions>
<exclusion>
<artifactId>guava</artifactId>
<groupId>com.google.guava</groupId>
</exclusion>
</exclusions>
</dependency>
controller:接口
/**
* 下载excel文档(2)
* 最新接口:后端导出
* @param
*/
@GetMapping(value = "/exportExcel", produces = "application/octet-stream")
@ApiOperation(value = "导出Excel数据")
public void exportExcel(HttpServletRequest request, HttpServletResponse response) throws IOException {
System.out.println("downLoadExcel接口================================start");
long start = System.currentTimeMillis();
//1.获取商品数据list
List<Ware> wareList = iWareService.list();
int totalNum = wareList.size();
//log.info("导出商品列表excel-数据量:{}",wareList.size());
//导出
//HSSF:03版本:后缀:xls //速度快兼容好
//XSSF:07版本:后缀:.xlsx
ExportParams params = new ExportParams("商品统计", "商品统计", ExcelType.HSSF);
Workbook workbook = ExcelExportUtil.exportExcel(params, ware.class, wareList);
//准备一个流开始响应
ServletOutputStream outputStream = null;
try {
//流形式
response.setHeader("content-type", "application/octet-stream");
//设置文件名字以及防止中文乱码
response.setHeader("content-disposition", "attachment;filename=" +
URLEncoder.encode("商品统计.xls", "UTF-8"));
outputStream = response.getOutputStream();
workbook.write(outputStream);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ObjectUtil.isNotNull(outputStream)) {
try {
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
//访问接口时间
long end = System.currentTimeMillis();
log.info("导出商品列表excel-请求客户端:{},数据量:{}条,耗时:{}ms", Iputils.getIP(request), totalNum, (end - start) * 0.001);
//returnMap.put("status","00");
System.out.println("downLoadExcel接口================================end");
//return returnMap;
}
工具类:
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import javax.servlet.http.HttpServletRequest;
public class Iputils {
public static String getIP(HttpServletRequest request) {
if (request == null) {
return "0.0.0.0";
}
String Xip = request.getHeader("X-Real-IP");
String XFor = request.getHeader("X-Forwarded-For");
String UNKNOWN_IP = "unknown";
if (StringUtils.isNotEmpty(XFor) && !UNKNOWN_IP.equalsIgnoreCase(XFor)) {
//多次反向代理后会有多个ip值,第一个ip才是真实ip
int index = XFor.indexOf(",");
if (index != -1) {
return XFor.substring(0, index);
} else {
return XFor;
}
}
XFor = Xip;
if (StringUtils.isNotEmpty(XFor) && !UNKNOWN_IP.equalsIgnoreCase(XFor)) {
return XFor;
}
if (StringUtils.isBlank(XFor) || UNKNOWN_IP.equalsIgnoreCase(XFor)) {
XFor = request.getHeader("Proxy-Client-IP");
}
if (StringUtils.isBlank(XFor) || UNKNOWN_IP.equalsIgnoreCase(XFor)) {
XFor = request.getHeader("WL-Proxy-Client-IP");
}
if (StringUtils.isBlank(XFor) || UNKNOWN_IP.equalsIgnoreCase(XFor)) {
XFor = request.getHeader("HTTP_CLIENT_IP");
}
if (StringUtils.isBlank(XFor) || UNKNOWN_IP.equalsIgnoreCase(XFor)) {
XFor = request.getHeader("HTTP_X_FORWARDED_FOR");
}
if (StringUtils.isBlank(XFor) || UNKNOWN_IP.equalsIgnoreCase(XFor)) {
XFor = request.getRemoteAddr();
}
return XFor;
}
}
被导出的实体:加入注解:@Excel(name = “id”,width = 20)
图片仅为示例
前端调用:换成自己的接口url的path,点击按钮,调方法,用axios get请求
downExcel(){
console.log('操作=============导出文档-1')
this.downloadRequest('/obj/project/exportExcel').then(data => {
console.log(data)
})
console.log('操作=============导出文档-2')
}