【SSM】下载服务器文件的方式

SSM框架:
方法一:利用ResponseEntity处理
前台:

$('#downlink').attr('href','music/download?murl='+data.murl);
document.getElementById("downlink").click();

后台:利用流的形式,构建ResponseEntity响应报文

 @RequestMapping(path="/download",method= RequestMethod.GET)
    public ResponseEntity<byte[]> Download(HttpSession session,String murl){
        try {
            // 获得ServletContext
            ServletContext servletContext = session.getServletContext();
            // 下载文件的路径
            String path = servletContext.getRealPath(murl);
           
            // 判断文件是否存在
            if(!new File(path).exists()){
                byte[] body = new String("").getBytes();
                return new ResponseEntity<>(body,HttpStatus.NOT_FOUND);
            }
            //输入流
            FileInputStream inputStream = new FileInputStream(path);
            byte[] body = new byte[inputStream.available()];
            // 将文件流读入到数组中
            inputStream.read(body);
            // 创建请求头
            HttpHeaders httpHeaders = new HttpHeaders();
            // 对文件名进行编码
            String filename = URLEncoder.encode(murl, "UTF-8");
            // 告知浏览器以附件的形式下载
            httpHeaders.add("Content-Disposition","attachment;filename="+filename);
            // 设置响应码
            ResponseEntity<byte[]> responseEntity = new ResponseEntity<>(body, httpHeaders, HttpStatus.OK);
            // 关闭输入流
            inputStream.close();
            // 返回响应报文
            return responseEntity;
        } catch (Exception e) {
            e.printStackTrace();
        }
        // 下载失败
        byte[] body = new String("").getBytes();
        return new ResponseEntity<>(body,HttpStatus.FORBIDDEN);
    }

方式2:利用静态资源放行的形式
在springmvc的配置文件里加上

<mvc:default-servlet-handler/>

即可通过资源地址访问webapp目录下的所有静态资源文件,若是音频、图片、文本等资源,浏览器会直接打开,而不是作为附件的形式下载。

方法3:利用输入流、输出流
后台:

@RequestMapping(path="/download2",method= RequestMethod.GET)
    public void download2(HttpServletRequest request, HttpServletResponse response,String murl){
        try{
            // 获得路径
            String path = request.getServletContext().getRealPath(murl);
            // 判断文件是否存在
            if(!new File(path).exists()){
                response.setContentType("text/html; charset=UTF-8");
                response.getWriter().print("");
                response.getWriter().close();
                return;
            }
            // 对文件名进行编码
            String filename = URLEncoder.encode(murl, "UTF-8");
            // 告知浏览器以附件的形式下载
            response.setHeader("Content-Disposition","attachment;filename="+filename);
            // 设置文件类型
            response.setContentType("multipart/form-data");
            // 输入流
            FileInputStream inputStream = new FileInputStream(path);
            //输出流
            ServletOutputStream outputStream = response.getOutputStream();
            // 设置缓冲区
            byte buffer[] = new byte[1024];
            // 读出
            int len = 0;
            while((len = inputStream.read(buffer)) > 0){
                outputStream.write(buffer,0,len);
            }
            // 关闭流
            inputStream.close();
            outputStream.close();

        }catch (Exception e){
            e.printStackTrace();
        }
    }

你可能感兴趣的:(Java)