SpringMVC文件下载

文件下载

用流的形式下载文件
- 前台
- 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();
    }

效果

SpringMVC文件下载_第1张图片
SpringMVC文件下载_第2张图片

结语

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

你可能感兴趣的:(java)