JavaWeb文件下载

针对JavaWeb文件上传在http://www.runoob.com/servlet/servlet-file-uploading.html上面已经很详细说明的,

但是该网站没有说明文件下载。对于一般的文件直接用a标签的话,如下代码所示。由于浏览器可以解析jpg和txt文件

,故不会直接下载而是在其他网页打开:

<a href="/IT/download/1.gif">下载图片</a>
<a href="/IT/download/day10.doc">下载文档</a>
<a href="/IT/download/day10.txt">下载笔记</a>

如果想要完成直接下载的目的,可以通过Servlet进行操作,做了一个简单的html页面

<a href="/IT/download?name=1.gif">下载图片1</a>
<a href="/IT/download?name=day10.doc">下载文档1</a>
<a href="/IT/download?name=day10.txt">下载笔记1</a>

我为download注册了一个servlet,xml描写如下:

  <servlet>
    <servlet-name>DownloadServlet</servlet-name>
    <servlet-class>com.response.download.DownloadServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>DownloadServlet</servlet-name>
    <url-pattern>/download</url-pattern>
  </servlet-mapping>

由于我的请求方式是get方式,所以只需在DownloadServlet这个类中重写doGet方法,代码实现如下

public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        
        //获取文件名
        String filename=request.getParameter("name");
        //防止读取name名乱码
        filename=new String(filename.getBytes("iso-8859-1"),"utf-8");
        //在控制台打印文件名
        System.out.println("文件名:"+filename);
        
         //设置文件MIME类型  
        response.setContentType(getServletContext().getMimeType(filename));  
        //设置Content-Disposition  
        response.setHeader("Content-Disposition", "attachment;filename="+filename);
        
        //获取要下载的文件绝对路径,我的文件都放到WebRoot/download目录下
        ServletContext context=this.getServletContext();
        String fullFileName=context.getRealPath("/download/"+filename);
        
        //输入流为项目文件,输出流指向浏览器
        InputStream is=new FileInputStream(fullFileName);
        ServletOutputStream os =response.getOutputStream();
        
        /*
         * 设置缓冲区
         * is.read(b)当文件读完时返回-1
         */
        int len=-1;
        byte[] b=new byte[1024];
        while((len=is.read(b))!=-1){
            os.write(b,0,len);
        }
        //关闭流
        is.close();
        os.close();
        
    }

 

posted on 2017-04-01 10:31  豆腐小二子  阅读(...)  评论(...编辑  收藏

导航

统计