SpringMVC文件下载

本文介绍了一个文件下载API的实现过程,包括从前端接收参数到后端处理并返回文件的完整流程。通过使用Java Servlet和Spring框架,实现了从指定路径读取文件,并将其以流的形式返回给客户端的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    @RequestMapping("/downloadFile.htm")//文件下载
    @ResponseBody
    public void file2Stream( Map<String, Object> requestMap, HttpServletResponse response,HttpServletRequest request) {  
         
        InputStream iStream = null;  
        OutputStream outStrem = null;  
        String url=request.getParameter("url").trim();//获取前端传来的起始年度

        try {  

            String[] filename=url.split("/");
            writeFilesService.downFile(url, filename[filename.length-1], request, response);

        } catch (Exception e) {  
           e.printStackTrace();  
        }finally {  
            if(iStream != null){  
                try {  
                    iStream.close();  
                    iStream = null;  
                } catch (IOException e) {  
                   e.printStackTrace();  
                }  
            }  
            if(outStrem != null){  
                try {  
                    outStrem.close();  
                    outStrem = null;  
                } catch (IOException e) {  
                   e.printStackTrace();
                }  
            }  
        }  
    }
     
    serviceImplement
     
    public HttpServletResponse downFile(String path1,String fileName,HttpServletRequest request,HttpServletResponse response) throws Exception {
     
    request.setCharacterEncoding("UTF-8");
    File file =new File(path1);
    System.out.println(path1);
    try {
        InputStream fis = new BufferedInputStream(new FileInputStream(file));
        byte[] buffer = new byte[fis.available()];
        try {
            fis.read(buffer);
        } catch (IOException e1) {
            e1.printStackTrace();
        }
        try {
            fis.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        response.reset();
         
            response.addHeader("Content-disposition", "attachment; filename="+ fileName);
             
            response.addHeader("Content-Length", String.valueOf(file.length()));
            OutputStream tc = new BufferedOutputStream(response.getOutputStream());
            response.setContentType("application/octet-stream");
            tc.write(buffer);
            tc.flush();
            tc.close();
         
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return response;
     
}

转载于:https://my.oschina.net/CarrieLiu/blog/1554504

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值