java根据输入的文件路径和文件名,web服务器返回一个输出流

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
@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();
       }
   }

  *** 如果在浏览器中加载这个地址,则会直接触动流浪器,执行下载操作

posted @   信铁寒胜  阅读(500)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示