• 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();
            }
        }
    

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

  • 相关阅读:
    当今世界最为经典的十大算法投票进行时
    HDU_1203 I NEED A OFFER!
    POJ_2352 Stars(树状数组)
    HDU_1231 最大连续子序列
    POJ_3264 Balanced Lineup(线段树练手题)
    【转】休息几分种,学几个bash快捷键
    HDU_1013 Digital Roots
    HDU_1381 Crazy Search
    POJ_2528 Mayor's posters(线段树+离散化)
    zoj_1610 Count tht Color
  • 原文地址:https://www.cnblogs.com/wwssgg/p/16377076.html
Copyright © 2020-2023  润新知