频道栏目
首页 > 程序开发 > 软件开发 > Java > 正文
Servlet实现文件下载
2017-01-03 09:38:00         来源:小菜虾的专栏  
收藏   我要投稿

目标

把项目文件config下的new.zip给下载下来

目录结构

这里写图片描述

java代码

public class DownServletextends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //  给下载文件命名
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("YYYYMMddHHmmss");
        String s = simpleDateFormat.format(new Date());
        String fileName = s+".zip";

        //  下载必须设置头
        response.setHeader("content-disposition", "attachment;filename="+fileName);

        //  获得文件
        InputStream is = this.getServletContext().getResourceAsStream("/config/new.zip");

        //  输出流
        OutputStream os = response.getOutputStream();

        byte[] buffer = new byte[1024];
        int len = -1;
        while ((len=is.read(buffer))!=-1) {
            os.write(buffer, 0, len);
        }
        os.close();
        is.close();
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}

配置文件

  <servlet>
    <description></description>
    <display-name>DownServlet</display-name>
    <servlet-name>DownServlet</servlet-name>
    <servlet-class>itheima.down_servlet.DownServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>DownServlet</servlet-name>
    <url-pattern>/DownServlet</url-pattern>
  </servlet-mapping>

HTML代码

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <a href="/day14/DownServlet">下载</a><br>
</body>
</html>

扩展

当fileName 是中文的时候,就要考虑到转码的问题。大多数的浏览器都是采用url解码,只有火狐浏览器采用自己独有的解码方式。加上转码的代码,如下

        //拿到浏览器请求的信息
        String agent = request.getHeader("User-Agent");
        if (agent.contains("Firefox")) {
            //火狐浏览器有专门的编码方式
            String s = new BASE64Encoder().encode(fileName.getBytes());
            fileName = "=?utf-8?B?"+s+"?=";     
        } else {
            //  除了火狐浏览器外,编码方式
            fileName = URLEncoder.encode(fileName, "utf-8");
        }

火狐浏览器解析的升级代码:需要导入jar包。

        //拿到浏览器请求的信息
        String agent = request.getHeader("User-Agent");
        if (agent.contains("Firefox")) {
            //火狐浏览器有专门的编码方式,这里采用commons-codec-1.9.jar包简化代码
            try {
                fileName = new BCodec().encode(fileName, "utf-8");
            } catch (EncoderException e) {
                e.printStackTrace();
            }
        } else {
            //  除了火狐浏览器外,编码方式
            fileName = URLEncoder.encode(fileName, "utf-8");
        }
点击复制链接 与好友分享!回本站首页
上一篇:观察者模式(java实现)
下一篇:JavaEE Spring框架学习笔记(AOP Introductions介绍)
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站