• 【Servlet】java web 文件下载功能实现


    需求:实现一个具有文件下载功能的网页,主要下载压缩包和图片

    两种实现方法:

        一:通过超链接实现下载

    在HTML网页中,通过超链接链接到要下载的文件的地址
    1. <!DOCTYPE html>  
    2. <html>  
    3. <head>  
    4. <meta charset="UTF-8">  
    5. <title>Insert title here</title>  
    6. </head>  
    7. <body>  
    8. <h1>通过链接下载文件</h1>  
    9. <href="/day06/download/cors.zip">压缩包</a>  
    10. <href="/day06/download/1.png">图片</a>  
    11. </body>  
    12. </html>  

    其中day06/download是文档路径,本实例的程序结构如下:

    程序运行后,可以通过单击需要下载文档实现下载

    但是这里会出现一个问题,就是单击下载压缩包的时候会弹出下载页面,但是下载图片的时候浏览器就直接打开了图片,没有下载。

        这是因为通过超链接下载文件时,如果浏览器可以识别该文件格式,浏览器就会直接打开。只有浏览器不能识别该文件格式的时候,才会实现下载。因此利用第二种方法实现下载功能。

        二:通过Servlet程序实现下载

        通过Servlet下载文件的原理是通过servlet读取目标程序,将资源返回客户端。
    1. <!DOCTYPE html>  
    2. <html>  
    3. <head>  
    4. <meta charset="UTF-8">  
    5. <title>Insert title here</title>  
    6. </head>  
    7. <body>  
    8. <h1>通过链接下载文件</h1>  
    9. <href="/day06/download/cors.zip">压缩包</a>  
    10. <href="/day06/download/1.png">图片</a>  
    11. <h1>通过servlet程序下载文件</h1>  
    12. <href="/day06/ServletDownload?filename=cors.zip">压缩包</a>  
    13. <href="/day06/ServletDownload?filename=1.png">图片</a>  
    14. </body>  
    15. </html>  

    其中,/day06/ServletDownload 是servlet程序的映射路径
    然后新建一个servlet,名称为ServletDownload,URL映射为/ServletDownload

    添加代码如下:
    1. package com.lsgjzhuwei.servlet.response;  
    2.   
    3. import java.io.FileInputStream;  
    4. import java.io.FileOutputStream;  
    5. import java.io.IOException;  
    6. import java.io.InputStream;  
    7. import java.io.OutputStream;  
    8.   
    9. import javax.servlet.ServletException;  
    10. import javax.servlet.annotation.WebServlet;  
    11. import javax.servlet.http.HttpServlet;  
    12. import javax.servlet.http.HttpServletRequest;  
    13. import javax.servlet.http.HttpServletResponse;  
    14.   
    15. /** 
    16.  * Servlet implementation class ServletDownload 
    17.  */  
    18. @WebServlet(asyncSupported = true, urlPatterns = { "/ServletDownload" })  
    19. public class ServletDownload extends HttpServlet {  
    20.     private static final long serialVersionUID = 1L;  
    21.          
    22.     /** 
    23.      * @see HttpServlet#HttpServlet() 
    24.      */  
    25.     public ServletDownload() {  
    26.         super();  
    27.         // TODO Auto-generated constructor stub  
    28.     }  
    29.   
    30.     /** 
    31.      * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 
    32.      */  
    33.     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  
    34.         // TODO Auto-generated method stub  
    35.           
    36.         //获得请求文件名  
    37.         String filename = request.getParameter("filename");  
    38.         System.out.println(filename);  
    39.           
    40.         //设置文件MIME类型  
    41.         response.setContentType(getServletContext().getMimeType(filename));  
    42.         //设置Content-Disposition  
    43.         response.setHeader("Content-Disposition", "attachment;filename="+filename);  
    44.         //读取目标文件,通过response将目标文件写到客户端  
    45.         //获取目标文件的绝对路径  
    46.         String fullFileName = getServletContext().getRealPath("/download/" + filename);  
    47.         //System.out.println(fullFileName);  
    48.         //读取文件  
    49.         InputStream in = new FileInputStream(fullFileName);  
    50.         OutputStream out = response.getOutputStream();  
    51.           
    52.         //写文件  
    53.         int b;  
    54.         while((b=in.read())!= -1)  
    55.         {  
    56.             out.write(b);  
    57.         }  
    58.           
    59.         in.close();  
    60.         out.close();  
    61.     }  
    62.   
    63.     /** 
    64.      * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 
    65.      */  
    66.     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  
    67.         // TODO Auto-generated method stub  
    68.     }  
    69.   
    70. }  

    重启tomcat服务器,即可实现对压缩包和对图片的下载。

    原文连接:Java web文件下载功能实现

  • 相关阅读:
    使用BigDecimal进行精确运算
    Hibernate读书笔记数据过滤
    Hibernate读书笔记Hibernate的关联映射之1N关联映射
    bernate读书笔记条件查询
    Hibernate读书笔记Hibernate的关联映射之NN关联映射
    Hibernate读书笔记缓存
    Hibernate读书笔记事件机制
    解决拦截器的对于参数传递无效问题
    Hibernate读书笔记SQL查询
    Hibernate读书笔记Hibernate的关联映射之组件属性关联关系
  • 原文地址:https://www.cnblogs.com/HDK2016/p/7290779.html
Copyright © 2020-2023  润新知