servlet实操之Response下载文件

1、HttpServletResponse

web服务器接收到客户端的Http请求,针对这个请求分别创建一个代表请求的HttpServletRequest对象和一个代表相应的HttpServletResponse对象。
~如果要获取客户端请求过来的参数 找HttpServletRequest
~如果要给客户端一些相应的数据 找HttpServletResponse

简单分类

负责向浏览器发送数据的方法

ServletOutputStream getOutputStream() throws IOException
PrintWriter getWriter() throws IOException

负责向浏览器发送响应头的方法

    void addDateHeader(String name, long date);
    public void setHeader(String name, String value);
    public void addHeader(String name, String value);
    public void setIntHeader(String name, int value);
    public void addIntHeader(String name, int value);
    public void setStatus(int sc);
    public void setStatus(int sc, String sm);

一些响应状态码

image

常见应用

①向浏览器输出消息
②下载文件
1、要获取下载文件的路径
2、下载的文件名是啥
3、设置想办法让浏览器能够支持我们下载的东西
4、获取文件的下载流
5、创建缓冲区
6、获取Outputstream对象
7、将FileOutputstream流写入到buffer缓冲区
8、使用Outputstream将缓冲区中的数据输出到客户端

有一些路径的坑去看看这个文章吧:https://www.cnblogs.com/sos-blue/archive/2012/03/12/2391304.html

    // 1、要获取下载文件的路径
        ServletContext servletContext = this.getServletContext();
        //String rpath = "C:\\Users\\user\\Pictures\\永劫无间.png";
        //String rpath = "D:\\java_project\\maven_project\\ALL_JavaProject\\Response\\target\\classes\\永劫无间.png";
        String path = "D:\\java_project\\maven_project\\ALL_JavaProject\\Response\\src\\main\\resources\\永劫无间.png";
        // String path = servletContext.getResourceAsStream(rpath).toString();
        System.out.println("下载文件的路径:"+path);
    // 2、下载的文件名是啥
        String filename = path.substring(path.lastIndexOf("\\") + 1);
    // 3、设置想办法让浏览器能够支持我们下载的东西
        resp.setHeader("Content-disposition","attachment;filename="+ URLEncoder.encode(filename,"utf-8") );
    // 4、获取文件的下载流
        FileInputStream fileInputStream = new FileInputStream(path);
        System.out.println(fileInputStream);
    // 5、创建缓冲区
        int len = 0;
        byte[] buffer = new byte[1024];
    // 6、获取Outputstream对象
        ServletOutputStream outputStream = resp.getOutputStream();
    // 7、将FileOutputstream流写入到buffer缓冲区
        while ((len = fileInputStream.read(buffer)) != -1)
        {
            outputStream.write(buffer,0,len);
        }
    // 8、使用Outputstream将缓冲区中的数据输出到客户端

        fileInputStream.close();
        outputStream.flush();
        outputStream.close();
posted @   Takiyo  阅读(123)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南

阅读目录(Content)

此页目录为空

点击右上角即可分享
微信分享提示