下载文件,实际上就是将文件转成输出流即可
要注意,输出不同的文件类型,需要设置不同的请求头信息,常用的如下
text/html :HTML格式
text/plain :纯文本格式
text/xml :XML格式
image/gif :gif图片格式
image/jpeg :jpg图片格式
image/png :png图片格式
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet:xlsx表格类型
application/xml : XML数据格式
application/json : JSON数据格式
application/pdf : pdf格式
application/msword : Word文档格式
application/octet-stream : 二进制流数据(如文件下载)
application/x-www-form-urlencoded :
<form encType="">中默认的encType,
form表单数据被编码为key/value格式发送到服务器(表单默认的提交数据的格式)。
服务器收到的raw body会是,name=aaa&key=bbb。
multipart/form-data : 表单上传文件
IoUtil是hutool工具类,需要引入hutool依赖
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>4.6.2</version>
</dependency>
例:输出普通文本类型文件下载
@PostMapping("/test")
public void test(HttpServletResponse response)
{
response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + URLUtil.encode("测试文档") + ".txt");
response.setContentType("text/plain");
ServletOutputStream outputStream = null;
String msg = "测试内容\n测试一下哈哈哈啊"
try {
outputStream = response.getOutputStream();
byte[] bytes = msg .getBytes();
IoUtil.write(outputStream, false, bytes);
} catch (IOException e) {
e.printStackTrace();
} finally {
IoUtil.close(outputStream);
}
}
例:输出表格类型文件下载,使用hutool工具类
@PostMapping(value = "exportWindArea")
public void exportWindDevice(HttpServletResponse response) {
try {
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + URLUtil.encode("片区列表") + ".xlsx");
EasyExcel.write(response.getOutputStream(), WindAreaExportDTO.class).sheet("片区列表").doWrite(windAreaService.expoetList());
} catch (Exception e) {
throw new BizException(CodeMsg.IMPORT_DATA_ERROR);
}
}
@Override
public List<WindAreaExportDTO> expoetList() {
List<WindArea> windAreaList = windAreaRepository.findAll();
return windAreaList.stream().map(e->{
WindAreaExportDTO windAreaExportDTO = new WindAreaExportDTO();
BeanUtils.copyProperties(e,windAreaExportDTO);
return windAreaExportDTO;
}).collect(Collectors.toList());
}
package com.linkyoyo.weatherpredict.dto;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
public class WindAreaExportDTO {
@ColumnWidth(15)
@ExcelProperty(value = "片区名称")
private String windAreaName;
@ColumnWidth(15)
@ExcelProperty(value = "片区负责人")
private String areaManagerName;
@ColumnWidth(15)
@ExcelProperty(value = "联系电话")
private String managerPhone;
@ColumnWidth(15)
@ExcelProperty(value = "邮箱")
private String managerEmail;
}
}