编程语言
首页 > 编程语言> > java根据输入的文件路径和文件名,web服务器返回一个输出流

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

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

标签:web,java,String,StringBuilder,toString,服务器返回,new,response,append
来源: https://www.cnblogs.com/wwssgg/p/16377076.html