文件下载
后端方面 接口如下
@RestController
@RequestMapping(value="/admin/product/category")
public class CategoryController {
//导出
@GetMapping("exportData")
public void exportData(HttpServletResponse response) {
categoryService.exportData(response);
}
}
导出方法的实现
//导出
@Override
public void exportData(HttpServletResponse response) {
try {
//即我要用这样的方式导出
//设置响应的头信息
response.setContentType("application/vnd.ms-excel");//ms-excel微软中excel表格
response.setCharacterEncoding("utf-8");
// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
String fileName = URLEncoder.encode("分类数据", "UTF-8");
//设置响应头 Content-disposition 让文件以下载格式下载
response.setHeader("Content-disposition","attachment;filename="+ fileName + ".xlsx");
//接下来写方法来查询数据并且导出
//调用mapper方法查询所有的分类,返回list
List<Category> categoryList = categoryMapper.findAll();
//把Category 转换为 categoryExcelVoList
//这里是因为我查询到的是Category类型 但是导出的是 CategoryExcelVo类型 需要转换
List<CategoryExcelVo> categoryExcelVoList = new ArrayList<>();
for (Category category:categoryList) {
CategoryExcelVo categoryExcelVo = new CategoryExcelVo();
//把category中的值 设置到categoryExcelVo里 工具类BeanUtils中的copyProperties方法可以直接转换
BeanUtils.copyProperties(category,categoryExcelVo);
categoryExcelVoList.add(categoryExcelVo);
}
//调用easyexcel的write方法完成
EasyExcel.write(response.getOutputStream(), CategoryExcelVo.class).sheet().doWrite(categoryExcelVoList);
}catch (Exception e){
e.printStackTrace();
throw new baimaxException(ResultCodeEnum.DATA_ERROR);
}
}
其中查找数据库的sql语句如下
<!-- 用于select查询公用抽取的列 -->
<sql id="columns">
id,name,image_url,parent_id,status,order_num,create_time,update_time,is_deleted
</sql>
<select id="findAll" resultMap="categoryMap">
select <include refid="columns" />
from category
where is_deleted = 0
order by id
</select>
前端中导入的接口
// 导出方法
export const ExportCategoryData = () => {
return request({
url: `${api_name}/exportData`,
method: 'get',
responseType: 'blob' // // 这里指定响应类型为blob类型,二进制数据类型,用于表示大量的二进制数据
})
}
导出方法的前端
/导出方法
const exportData = () => {
// 调用 ExportCategoryData() 方法获取导出数据
ExportCategoryData().then(res => {
// 创建 Blob 对象,用于包含二进制数据
const blob = new Blob([res]);
// 创建 a 标签元素,并将 Blob 对象转换成 URL
const link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
// 设置下载文件的名称
link.download = '分类数据.xlsx';
// 模拟点击下载链接
link.click();
})
}
其中 绑定的方法是exportData
运行结果如下