Java文件下载(excel)
2016-09-28 13:51
232 查看
最简单的方法就是把文件链接写到a标签的href里,但是有人说了,这样会暴露服务器的文件路径,有风险- -
下面整理介绍几种通过代码实现的方法:
1,
spring里的方法,跟response无关。
2,
web.xml中
这个方法是通过servlet拦截url请求,如果匹配到相应的路径,则下载。
3,
这个方法其实和法2类似,都是写到response中,只不过法2用FileCopyUtils.copy()简化了操作。
记住:下载之前得确定路径正确且路径下确实存在文件哦。
下面整理介绍几种通过代码实现的方法:
1,
@RequestMapping("download") public ResponseEntity<byte[]> download(HttpServletRequest request) throws Exception { String fileName = request.getParameter("fileName"); String path = request.getSession().getServletContext().getRealPath("")+File.separator+"WEB-INF"+File.separator+"download"; File file = new File(path,fileName); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); headers.setContentDispositionFormData("attachment", fileName); return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),headers, HttpStatus.CREATED); }
spring里的方法,跟response无关。
2,
web.xml中
<servlet-mapping> <servlet-name>DownloadServlet</servlet-name> <url-pattern>/files/*</url-pattern> </servlet-mapping>
public void fileOutputStream(HttpServletRequest req, HttpServletResponse resp){ String filepath = req.getRequestURI(); int index = filepath.indexOf(Global.USERFILES_BASE_URL); if(index >= 0) { filepath = filepath.substring(index + Global.USERFILES_BASE_URL.length()); } try { filepath = UriUtils.decode(filepath, "UTF-8"); } catch (UnsupportedEncodingException e1) { logger.error(String.format("解释文件路径失败,URL地址为%s", filepath), e1); } File file = new File(Global.getUserfilesBaseDir() + Global.USERFILES_BASE_URL + filepath); try { FileCopyUtils.copy(new FileInputStream(file), resp.getOutputStream()); resp.setHeader("Content-Type", "application/octet-stream"); return; } catch (FileNotFoundException e) { req.setAttribute("exception", new FileNotFoundException("请求的文件不存在")); req.getRequestDispatcher("/WEB-INF/views/error/404.jsp").forward(req, resp); } }
这个方法是通过servlet拦截url请求,如果匹配到相应的路径,则下载。
3,
@RequestMapping("/exportExcel") public void exportExcel(HttpServletRequest request,HttpServletResponse response) { try { String filepath = ;//已存在的文件路径 FileInputStream fis = null; OutputStream os = null; try { String downLoadName = new String("导出.xls".getBytes("gbk"), "iso8859-1"); fis = new FileInputStream(filepath); os = response.getOutputStream();// 取得输出流 response.reset();// 清空输出流 response.setHeader("Content-disposition", "attachment; filename=" + downLoadName);// 设定输出文件头 response.setContentType("application/x-download;charset=GBK;"); byte[] mybyte = new byte[fis.available()]; int len = 0; while ((len = fis.read(mybyte)) != -1) { os.write(mybyte, 0, len); } os.close(); } catch (IOException e) { e.printStackTrace(); } } catch (Exception e) { e.printStackTrace(); } }
这个方法其实和法2类似,都是写到response中,只不过法2用FileCopyUtils.copy()简化了操作。
记住:下载之前得确定路径正确且路径下确实存在文件哦。
相关文章推荐
- java 通用文件下载 excel,pdf,word,jpg,exe,rar
- java 下载样板Excel文件
- java实现赋值excel模板,并在新文件中写入数据,并且下载
- java导出excel 下载文件
- java 读取Excel处理并在网页下载处理后的新文件
- java excel 文件下载
- web导出excel--------java导出文件弹出下载框让用户选择路径
- java --struts2数据库导出Excel文件,下载提示
- java导出Excel文件,直接可以下载,然后更新状态,刷新页面
- java 多excel下载 打成zip压缩包 程序中创建文件 响应到浏览器(三)
- JAVA JXL -----excel文件生成、在线打开和下载
- java 中 excel生成并文件下载保存到本地(三)
- jsp下载 java BufferedInputStream 读取excel文件 这样就不出...
- Java通用的Excel文件生成工具类,支持生成文件和浏览器直接下载(未测试)
- 读取excel文件(jxl.jar包简介/java操作excel jxl.jar下载地址)
- Java Excel文件下载
- java 通用文件下载 excel,pdf,word,jpg,exe,rar
- Java导出页面数据或数据库数据至Excel文件并下载,采用JXL技术,小demo(servlet实现)
- java 多excel下载 打成zip压缩包 程序中创建文件 响应到浏览器
- java下载excel文件在firefox中文件名为乱码