从本地项目中下载excel模版
@RequestMapping(value = "/downloadExcelByName", method = RequestMethod.GET)
public void downloadExcelByName(String fileName, HttpServletRequest request, HttpServletResponse response)
throws Exception {
OutputStream os = null;
try {
// 文件下载
//response.setContentType("multipart/form-data");
response.setContentType("application/vnd.ms-excel;charset=UTF-8");
response.setHeader("Content-Disposition",
"attachment;filename=" + StringUtilx.encodeFileName(request, fileName));
os = response.getOutputStream();
InputStream bis = null;
bis = this.getClass().getResourceAsStream("/"+fileName);//获取项目中文件的流
ByteArrayOutputStream swapStream = new ByteArrayOutputStream();
byte[] buff = new byte[100]; //buff用于存放循环读取的临时数据
int rc = 0;
while ((rc = bis.read(buff, 0, 100)) > 0) {
swapStream.write(buff, 0, rc); //写入到字节数组输出流中
}
byte[] excelByteFile = swapStream.toByteArray();//将字节流转化成字节数组,直接输出会有丢失。
int i = 0;
while ((i + 1024) <= excelByteFile.length) {
os.write(excelByteFile, i, 1024);
i += 1024;
}
int len = excelByteFile.length % 1024;
if (len > 0) {
os.write(excelByteFile, i, len);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
os.close();
}
}
如果下载下来的打不开,可能是由于maven进行了统一编码在maven 加入以下插件 clean以下在启动
org.apache.maven.plugins
2.6
maven-resources-plugin
UTF-8
xlsx
第二种
public class FileUtil {
private final static Logger log = LoggerFactory.getLogger(FileUtil.class);
/**
* 下载项目根目录下doc下的文件
*
* @param response response
* @param fileName 文件名
* @return 返回结果 成功或者文件不存在
*/
public static Response downloadFile(HttpServletResponse response, String fileName) {
InputStream stream = FileUtil.class.getClassLoader().getResourceAsStream("static/excel/" + fileName);
if (stream == null) {
log.error("文件没有找到");
throw new RuntimeException("没有找到文件");
}
response.setHeader("content-type", "application/octet-stream");
response.setContentType("application/vnd.ms-excel;charset=utf-8");
try {
String name = java.net.URLEncoder.encode(fileName, "UTF-8");
response.setHeader("Content-Disposition", "attachment;filename=" + java.net.URLDecoder.decode(name, "ISO-8859-1"));
} catch (UnsupportedEncodingException e) {
log.error("文件名转换编码出现问题:" + e.getMessage());
}
byte[] buff = new byte[1024];
BufferedInputStream bis = null;
OutputStream os = null;
try {
os = response.getOutputStream();
bis = new BufferedInputStream(stream);
int i = bis.read(buff);
while (i != -1) {
os.write(buff, 0, buff.length);
os.flush();
i = bis.read(buff);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
log.error("系统找不到指定的文件:" + e.getMessage());
return Response.error("系统找不到指定的文件");
} catch (IOException e) {
e.printStackTrace();
log.error("Io流写入出现错误:" + e.getMessage());
return Response.error("Io流写入出现错误");
} finally {
try {
os.close();
if (bis != null) {
bis.close();
}
} catch (IOException e) {
e.printStackTrace();
log.error("关闭流出现错误:" + e.getMessage());
return Response.error("关闭流出现错误");
}
}
return Response.success();
}```