• 热门专题

javaweb文件下载功能实现

作者:  发布日期:2014-09-20 20:11:45
Tag标签:文件下载  功能  
  • 需求:实现一个具有文件下载功能的网页,主要下载压缩包和图片

    两种实现方法:

    一:通过超链接实现下载

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

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

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

    但是这里会出现一个问题,就是单击下载压缩包的时候会弹出下载页面,但是下载图片的时候浏览器就直接打开了图片,没有下载。
    这是因为通过超链接下载文件时,如果浏览器可以识别该文件格式,浏览器就会直接打开。只有浏览器不能识别该文件格式的时候,才会实现下载。因此利用第二种方法实现下载功能。

    二:通过Servlet程序实现下载

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

    其中,/day06/ServletDownload 是servlet程序的映射路径 然后新建一个servlet,名称为ServletDownload,URL映射为/ServletDownload
    添加代码如下:
    package com.lsgjzhuwei.servlet.response;
    
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
     * Servlet implementation class ServletDownload
     */
    @WebServlet(asyncSupported = true, urlPatterns = { "/ServletDownload" })
    public class ServletDownload extends HttpServlet {
    	private static final long serialVersionUID = 1L;
           
        /**
         * @see HttpServlet#HttpServlet()
         */
        public ServletDownload() {
            super();
            // TODO Auto-generated constructor stub
        }
    
    	/**
    	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
    	 */
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		// TODO Auto-generated method stub
    		
    		//获得请求文件名
    		String filename = request.getParameter("filename");
    		System.out.println(filename);
    		
    		//设置文件MIME类型
    		response.setContentType(getServletContext().getMimeType(filename));
    		//设置Content-Disposition
    		response.setHeader("Content-Disposition", "attachment;filename="+filename);
    		//读取目标文件,通过response将目标文件写到客户端
    		//获取目标文件的绝对路径
    		String fullFileName = getServletContext().getRealPath("/download/" + filename);
    		//System.out.println(fullFileName);
    		//读取文件
    		InputStream in = new FileInputStream(fullFileName);
    		OutputStream out = response.getOutputStream();
    		
    		//写文件
    		int b;
    		while((b=in.read())!= -1)
    		{
    			out.write(b);
    		}
    		
    		in.close();
    		out.close();
    	}
    
    	/**
    	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
    	 */
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		// TODO Auto-generated method stub
    	}
    
    }
    

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

About IT165 - 广告服务 - 隐私声明 - 版权申明 - 免责条款 - 网站地图 - 网友投稿 - 联系方式
本站内容来自于互联网,仅供用于网络技术学习,学习中请遵循相关法律法规