SpringMVC文件下载

本文介绍了一种利用文件流实现文件下载的方法,包括前端页面设计、后端Controller处理及下载工具类实现。通过实例展示了如何从前端发起下载请求,后端如何响应并返回文件流,最终实现文件的下载。

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

文件下载

用流的形式下载文件
- 前台
- Controller层
- 下载工具类

创建文件

在WEB-INFO下创建文件
这里写图片描述


前台Html

在前台将文件名传入后台:

<body>
    <form action="downFileInfo.do" method="post">
      <input type="hidden" name="fileName" value="需求.docx">
      <input type="submit" value="下载文件">
    </form>
  </body>

后台Controller层

获取文件名,再将文件名出入到下载工具类:

@RequestMapping("downFileInfo.do")
    public void downFile(HttpServletRequest request,
            HttpServletResponse response) throws IOException {
        // 获取从前台传递的文件名称
        String Name = request.getParameter("fileName");
        // 解决乱码
        String fileName = new String(Name.getBytes("iso8859-1"), "utf-8");
        // System.out.println(fileName);
        // System.out.println(request.getSession().getServletContext().getRealPath("/WEB-INF/file"));
        try {
            // 调用下载工具类,实现下载
            DownFileUtil.downFile(request, response, fileName);
        } catch (ServletException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

下载文件工具类

下载实现(文件流) 如果文件上传的时候将文件路径存在数据库中,获取文件路径的时候就可以通过service层来获取买然后传进来。再拼接文件路径:

public static void downFile(HttpServletRequest request,
            HttpServletResponse response, String fileName)
            throws ServletException, IOException {
        // 文件路径,文件名,可以从数据库中获取,
        // 文件所在目录路径
        String filePath = request.getSession().getServletContext()
                .getRealPath("/WEB-INF/file");
        // 获取文件
        File file = new File(filePath + "/" + fileName);
        System.out.println(file);
        if (!file.exists()) {
            System.out.println("没有找到该文件!");
            // 如果文件不存在就退出
            return;
        }
        FileInputStream fileInputStream = new FileInputStream(file);
        // 设置Http响应 让浏览器下载这个文件
        response.setHeader("Content-Disposition", "attachment;Filename="
                + new String(fileName.getBytes(), "iso-8859-1"));
        OutputStream outputStream = response.getOutputStream();
        byte[] bytes = new byte[2048];
        int len = 0;
        while ((len = fileInputStream.read(bytes)) > 0) {
            outputStream.write(bytes, 0, len);
        }
        fileInputStream.close();
        outputStream.close();
    }

效果

这里写图片描述
这里写图片描述

结语

前段时间有个优快云的小伙伴,问我下载一个Excel文件,是不是需要poi,
然后我问他如果下载不是下载excel文件呢?
我们在想问题的时候一定不能想得太片面。
下载本质还是流的操作,
注意:朋友们在项目或者学习中使用到流一定要考虑到关闭流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值