赞
踩
公司有个需求是下载excel的模板文件,我将excel文件放在了resouece资源文件夹下,通过文件流读取并写入到response流当中,调试接口文件能下载一切正常。后面打成jar包上到服务环境之后,下载的excel体积为0kb 并且打开之后显示文件是损坏的。后面通过将resouece资源文件夹下的文件先暂存到一个临时文件中,再读取临时文件的流解决了这个损坏文件的问题。
- public void downLoadTemplate(HttpServletResponse response, HttpServletRequest request) throws IOException {
- String fileName = "机构导入模板.xlsx";
- ClassPathResource classPathResource = new ClassPathResource("/excel/机构导入模板.xlsx");
- InputStream inputStream = classPathResource.getInputStream();
- //生成目标文件
- File somethingFile = File.createTempFile("Topic_Template", ".xlsx");
- try {
- FileUtils.copyInputStreamToFile(inputStream, somethingFile);
- } finally {
- IOUtils.closeQuietly(inputStream);
- }
- InputStream in = new FileInputStream(somethingFile);
- FileDownLoadUtil.getFileContent(in, fileName, response, request);
- }
- public static void getFileContent(InputStream inputStream, String name, HttpServletResponse response, HttpServletRequest request) {
- // 清空response
- response.reset();
- try {
- InputStream in = inputStream;
- response.setHeader("Content-Length", String.valueOf(in.available()));
- byte[] buffer = new byte[in.available()];
- //不加打开会文件损坏
- in.read(buffer);
- in.close();
- String userAgent = request.getHeader("User-Agent");
- String fileName;
- if (userAgent.contains("MSIE") || userAgent.contains("Trident")) {
- fileName = URLEncoder.encode(name, "UTF-8");
- } else {
- // 非IE浏览器的处理:
- fileName = new String(name.getBytes("UTF-8"), "ISO-8859-1");
- }
- // 设置response的Header
- response.addHeader("Content-Disposition", "attachment;filename=" + fileName);
- OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
- response.setContentType("application/octet-stream");
- toClient.write(buffer);
- toClient.flush();
- toClient.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。