java根据输入的文件路径和文件名,web服务器返回一个输出流
@RequestMapping("/download") private void download(@RequestBody Map<String,Object> requestJsonMap, HttpServletResponse response){ String directory = (String) requestJsonMap.get("directory"); String filename = (String) requestJsonMap.get("filename"); try { File file = new File(new StringBuilder().append(this.filaPath).append(directory != null ? new StringBuilder(). append(directory).append("\\").toString() : "").append(filename).toString()); log.info(file.getPath()); String fileName = file.getName(); String ext = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase(); log.info(new StringBuilder().append("文件后缀名:").append(ext).toString()); if (!file.exists()) { response.reset(); Map map = new HashMap(); map.put("success", Boolean.valueOf(false)); map.put("message", new StringBuilder().append("找不到文件 ").append(filename).toString()); String jsonMap = new ObjectMapper().writeValueAsString(map); response.setContentType("application/json;charset=UTF-8"); response.getWriter().println(jsonMap); } else { FileInputStream fileInputStream = new FileInputStream(file); InputStream fis = new BufferedInputStream(fileInputStream); byte[] buffer = new byte[fis.available()]; fis.read(buffer); fis.close(); response.reset(); response.setCharacterEncoding("UTF-8"); response.addHeader("Content-Disposition", new StringBuilder().append("attachment;filename=").append(URLEncoder.encode(fileName, "UTF-8")).toString()); response.addHeader("Content-Length", new StringBuilder().append("").append(file.length()).toString()); OutputStream outputStream = new BufferedOutputStream(response.getOutputStream()); response.setContentType("application/octet-stream"); outputStream.write(buffer); outputStream.flush(); } } catch (IOException ex) { ex.printStackTrace(); } }
*** 如果在浏览器中加载这个地址,则会直接触动流浪器,执行下载操作