文件放置位置
将模版文件放到resources下,如果要加文件夹不要命名为:template
代码
import org.springframework.core.io.ClassPathResource;
import javax.servlet.ServletOutputStream;
import java.io.ByteArrayOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;
@PostMapping("/downTemplete")
@ApiOperation("下载模板")
public void downTemplete(HttpServletResponse response) {
InputStream inputStream = null;
try (ServletOutputStream outputStream = response.getOutputStream()) {
//设置响应头信息,包括下载后的文件名和编码等
response.addHeader("content-disposition", String.format("attachment;filename= %s", URLEncoder.encode("人员费用明细导入模板.xlsx", "utf-8")));
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setCharacterEncoding("UTF-8");
//在文件夹里获取到文件并转为流
inputStream = new ClassPathResource("templates/CostWorkers.xlsx").getInputStream();
byte[] b = streamToByteArray(inputStream);
outputStream.write(b);
} catch (Exception e) {
log.error("下载模板异常", e);
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
log.error("关闭流异常", e);
}
}
}
}
private byte[] streamToByteArray(InputStream inputStream) throws IOException {
try(ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
return outputStream.toByteArray();
} catch (Exception e) {
return null;
}
}