• 入门JavaWeb之 Response 下载文件


    web 服务器接收到客户端的 http 请求

    针对这个请求,分别创建一个代表请求的 HttpServletRequest 对象,代表响应的 HttpServletResponse 对象

    获取客户端请求过来的参数:HttpServletRequest

    给客户端响应一些信息:HttpServletResponse

    下载文件:

    1.获取下载文件的路径

    2.下载的文件名

    3.让浏览器支持下载

    4.获取下载文件的输入流

    5.创建缓冲区

    6.获取 OutputStream 对象

    7.将 FileOutputStream 流写入到 buffer 缓冲区

    8.使用 OutputStream 将缓冲区中的数据输出到客户端

    pom.xml 导入 jar 包

    1. <dependency>
    2. <groupId>javax.servletgroupId>
    3. <artifactId>javax.servlet-apiartifactId>
    4. <version>4.0.1version>
    5. <scope>providedscope>
    6. dependency>
    7. <dependency>
    8. <groupId>javax.servlet.jspgroupId>
    9. <artifactId>javax.servlet.jsp-apiartifactId>
    10. <version>2.3.3version>
    11. <scope>providedscope>
    12. dependency>

     getRealPath 绝对路径,resources 放入需要下载的文件

    substring 截取字符串

    setHeader 文件头信息

    resp.setHeader("Content-disposition","attachment;filename"+fileName);

    new FileInputStream 输入流

    new byte[1024]

    getOutputStream 输出流

    读数据、写数据

    关闭流

    web.xml 注册和映射:

    1. <servlet>
    2. <servlet-name>downservlet-name>
    3. <servlet-class>com.demo.response.FileDownservlet-class>
    4. servlet>
    5. <servlet-mapping>
    6. <servlet-name>downservlet-name>
    7. <url-pattern>/downurl-pattern>
    8. servlet-mapping>

    (如果重新创建了 Module,Smart Tomcat 也要添加一个自己创建的路径)

    代码如下:

    1. package com.demo.response;
    2. import javax.servlet.ServletException;
    3. import javax.servlet.ServletOutputStream;
    4. import javax.servlet.http.HttpServlet;
    5. import javax.servlet.http.HttpServletRequest;
    6. import javax.servlet.http.HttpServletResponse;
    7. import java.io.FileInputStream;
    8. import java.io.IOException;
    9. import java.io.PrintWriter;
    10. public class FileDown extends HttpServlet {
    11. @Override
    12. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    13. //1.获取下载文件的路径
    14. //getRealPath 绝对路径
    15. String realPath = this.getServletContext().getRealPath("/1.png");
    16. //String realPath = "D:\\IntelliJProject\\javaweb\\response\\target\\classes\\com\\1.png";
    17. //2.下载的文件名
    18. //substring 截取字符串 /需要转义,用\\,+1获取下一个
    19. String fileName = realPath.substring(realPath.lastIndexOf("\\")+1);
    20. //3.让浏览器支持下载
    21. //setHeader 文件头信息,固定写法
    22. resp.setHeader("Content-disposition","attachment;filename"+fileName);
    23. //URLEncoder.encode编码支持中文
    24. //resp.setHeader("Content-disposition","attachment;filename"+ URLEncoder.encode(fileName,"UTF-8"));
    25. //4.获取下载文件的输入流
    26. FileInputStream fileInputStream = new FileInputStream(realPath);
    27. //5.创建缓冲区
    28. int len = 0;
    29. byte[] buffer = new byte[1024];
    30. //6.获取 OutputStream 对象,输出流
    31. ServletOutputStream outputStream = resp.getOutputStream();
    32. //7.将 FileOutputStream 流写入到 buffer 缓冲区
    33. //8.使用 OutputStream 将缓冲区中的数据输出到客户端
    34. while ((len = fileInputStream.read(buffer))!=-1){ //>0也行
    35. outputStream.write(buffer,1,len); //从1到len长度
    36. }
    37. //IO流后开先关
    38. outputStream.close();
    39. fileInputStream.close();
    40. }
    41. @Override
    42. protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    43. doGet(req, resp);
    44. }
    45. }
  • 相关阅读:
    C++:征服C指针:指针(二)
    GPT-4o横空出世,如何评价GPT-4o?
    Spring(二)- BeanFactory与ApplicationContext
    Mybatis面试总结(1)
    如何辨别优秀的人 选拔出最能打的选手
    Oracle Install 19c@CentOS 7.6
    算法--选择排序
    腾讯季报图解:营收1340亿降3% 马化腾称主动退出非核心业务
    JSD-2204-(业务逻辑开发)-开发分类功能-分页查询-Day08
    spark sql之巧用group by
  • 原文地址:https://blog.csdn.net/m0_58838332/article/details/139896853