Servlet之文件下载案例

@WebServlet(urlPatterns = "/fileDownload")
public class FileDownload extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request,response);
    }

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    /*
    * 文件下载:
    *   以字节流的方式读取文件,给客户端响应回去
    *   指导浏览器:回写的是一个附件,不要打开,可以下载
    *           设置响应头:response.setHeader("Content-Disposition","attachment;filename="文件名"")
    *
    *
    *     如果要设置下载的文件名:
    *     String agent = request.getHeader("User-Agent");
            String filename="美女.jpg";
            if (agent.contains("MSIE")) {
                // IE浏览器
                filename = URLEncoder.encode(filename, "utf-8");
                filename = filename.replace("+", " ");
            } else if (agent.contains("Firefox")) {
                // 火狐浏览器
                BASE64Encoder base64Encoder = new BASE64Encoder();
                filename = "=?utf-8?B?" + base64Encoder.encode(filename.getBytes("utf-8")) + "?=";
            } else {
                // 其它浏览器
                filename = URLEncoder.encode(filename, "utf-8");
            }
            System.out.println(filename);
            response.setHeader("Content-Disposition","attachment;filename"+filename);
    *
    *
    * */

    //指导浏览器回写的是一个附件,不要直接 打开,可以下载
    response.setHeader("Content-Disposition","attachment;filename=a.jpg");


    //一读一写复制文件
        //得到文件绝对路径
    String path = getServletContext().getRealPath("download/a.jpg");
    System.out.println(path);
        //获取本地输入流以及网络输出流
    FileInputStream fis = new FileInputStream(new File(path));
    ServletOutputStream os = response.getOutputStream();
        //复制文件
    byte[] bytes = new byte[1024];
    int len = 0;
    while ((len=fis.read(bytes))!=-1){
        os.write(bytes,0,len);
    }
        //释放资源
    fis.close();


    }
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值