用springboot和easyexcel写一个下载表格的接口,前端用vue和elementui 写下载文件的button,用response传输字节流
时间: 2024-03-03 19:52:11 浏览: 115
基于springboot+vue+element-ui前后端分离-办公自动化系统-源码
5星 · 资源好评率100%
好的,下面是一个使用Spring Boot和EasyExcel实现下载表格的接口的示例代码:
```java
@RestController
@RequestMapping("/download")
public class DownloadController {
@GetMapping("/excel")
public void downloadExcel(HttpServletResponse response) throws IOException {
// 获取数据,这里假设数据为一个List<User>对象
List<User> userList = getUserList();
// 设置响应头
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8");
response.setHeader("Content-disposition", "attachment;filename=test.xlsx");
// 创建ExcelWriter对象
OutputStream outputStream = response.getOutputStream();
ExcelWriter excelWriter = new ExcelWriter(outputStream, ExcelTypeEnum.XLSX, true);
// 写入数据
Sheet sheet = new Sheet(1, 0, User.class);
excelWriter.write(userList, sheet);
// 关闭ExcelWriter对象
excelWriter.finish();
// 关闭输出流
outputStream.flush();
outputStream.close();
}
private List<User> getUserList() {
// 返回一个List<User>对象,这里省略具体实现
}
}
```
这段代码中,我们首先定义了一个DownloadController类,其中包含一个downloadExcel()方法,用于下载Excel表格。在这个方法中,我们首先设置了响应头,包括Content-Type、Content-Encoding和Content-Disposition等字段,用于告诉浏览器下载的文件类型、编码和文件名。然后,我们创建了一个ExcelWriter对象,并写入数据。最后,我们通过response的getOutputStream()方法获取输出流,并将Excel表格写入到输出流中,完成下载。
对于前端部分,我们可以使用Vue和Element UI框架来实现一个下载文件的button,代码如下:
```vue
<template>
<el-button type="primary" icon="el-icon-download" @click="downloadExcel">下载Excel表格</el-button>
</template>
<script>
export default {
methods: {
downloadExcel() {
window.location.href = '/download/excel';
}
}
}
</script>
```
在这段代码中,我们使用了Element UI中的el-button组件来实现一个下载Excel表格的button,当用户点击该button时,会调用downloadExcel()方法。在这个方法中,我们使用window.location.href来实现下载文件的功能,将请求发送给后端的/download/excel接口即可。
最后,需要注意的是,在后端使用response传输字节流时,需要及时关闭输出流,避免资源的浪费。在上面的示例代码中,我们通过flush()和close()方法来关闭输出流。
阅读全文