Java Response 实现文件下载

发布于 2021-08-02  45 次阅读


使用Java Response实现文件下载的核心只有七步,如下:(导包略)

public class FileDown extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.获取文件路径(这里最好是文件的绝对路径)
        String realPath = "D:\\IntelliJ IDEA\\IdeaProjects\\firstservlet\\firstservlet-test\\src\\main\\resources\\1.png"

        //2.获取下载的文件名(这里的方法比较巧妙,自行领悟)
        String fileName = realPath.substring(realPath.lastIndexOf("\\") + 1);

        //3.设置浏览器支持(Content-Disposition)下载需要的东西(这里相当于固定格式,不用背,会背更好)
        resp.setHeader("Content-Disposition","attachment;filename=" + fileName);

        //4.获取下载文件的输入流
        FileInputStream in = new FileInputStream(realPath);

        //5.创建缓冲区
        int len = 0;
        byte[] buffer = new byte[1024];

        //6.获取OutPutStream对象
        ServletOutputStream out = resp.getOutputStream();

        //7.将fileInputStream流写入缓冲区,并使用OutPutStream将缓冲区中的数据输出到客户端
        while ((len = in.read(buffer))>0){
            out.write(buffer,0,len);
        }

        //别忘了关闭流
        in.close();
        out.close();
    }

    //下面的这个重写影响不大,不用管
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

写完主代码之后别忘了在web.xml中配置一下servlet,如下:

<servlet>
<servlet-name>FileDown</servlet-name>
<servlet-class>com.carlos.firstservlet.FileDown</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FileDown</servlet-name>
<url-pattern>/FileDown</url-pattern>
</servlet-mapping>

这样就大功告成了,理论上启动tomcat后在浏览器地址栏输入localhost:8080/test/FileDown就能下载文件啦。这里的test是我项目的名字,可以在tomcat中配置,无所谓的,后面的FileDown就是我们在web.xml中配的servlet。效果如图:

地址栏为: localhost:8080/test/FileDown,且跳出了下载界面,文件名就是我上面为了方便设置的1.png

本来到此已经结束了,我又突发奇想能不能让我的手机访问这个项目并下载这个文件?我觉得可行。于是查了些资料,发现只要手机与电脑处于同一局域网下,便可以实现该操作。而我现在已经满足了该条件,即用同一个WiFi。但我刚开始试的时候不行,这里注意一下:

要让其他用户访问本地电脑,不借助公网IP和内网穿透的时候,一定要记得放行tomcat(或其他Web服务)的端口,这里我就放行了自己电脑的8080(tomcat默认端口),于是乎我的手机就可以通过在浏览器上输入:

IP地址:8080/test/FileDown下载文件了,注意这里的IP地址,有些用户还没有接入IPV6访问,故无法使用IPV6,如果想知道自己的ip地址,可以在cmd窗口中使用ipconfig命令行,下面有一个IPV4,用它就行。

至于开放8080端口,在控制面板中搜索防火墙,打开Windows Defender 防火墙,点击左边高级设置,点击左边入站规则,点击右边新建规则,在跳出的窗口中依次选择“端口”、“TCP”,填写“8080”,“允许连接”,接下来全选,最后设置规则名称。