• servlet 文件下载


    【本文简介】

    一个servlet 文件下载 的简单例子。

    【文件夹结构】

    【java代码】

     1 package com.zjm.www.servlet;
     2 
     3 import java.io.BufferedInputStream;
     4 import java.io.BufferedOutputStream;
     5 import java.io.File;
     6 import java.io.FileInputStream;
     7 import java.io.IOException;
     8 import java.io.InputStream;
     9 import java.io.OutputStream;
    10  
    11 import javax.servlet.ServletException;
    12 import javax.servlet.http.HttpServlet;
    13 import javax.servlet.http.HttpServletRequest;
    14 import javax.servlet.http.HttpServletResponse;
    15 
    16 /**
    17  * @描述 servlet 文件下载
    18  * @作者   小M
    19  * @博客 http://www.cnblogs.com/xiaoMzjm/
    20  * @时间 2014/07/30
    21  */
    22 public class DownLoadServlet extends HttpServlet {
    23     
    24  
    25     private static final long serialVersionUID = 1L;
    26      
    27     public void doGet(HttpServletRequest request, HttpServletResponse response)
    28             throws ServletException, IOException {
    29         doPost(request,response);
    30     }
    31     
    32     public void doPost(HttpServletRequest request, HttpServletResponse response)
    33             throws ServletException, IOException {
    34          
    35         // 转码,建议使用过滤器过滤。
    36         request.setCharacterEncoding("UTF8");
    37         response.setCharacterEncoding("UTF8");
    38          
    39         // 获取上传文件的  文件名
    40         String fileName = request.getParameter("fileName");
    41          
    42         // 文件所放的文件夹,服务器文件相对路径。有关路径问题,请参考另一篇博文:http://www.cnblogs.com/xiaoMzjm/p/3878758.html
    43         String path = request.getServletContext().getRealPath("/")+"\DownLoadFile\";
    44          
    45         // 下载路径 = 文件所放的文件夹 + 文件名
    46         String downLoadPath = path + fileName;
    47          
    48         // 创建输入流 连接文件,并把文件 读 到流中
    49         File file = new File(downLoadPath);
    50         InputStream fis = new BufferedInputStream(new FileInputStream(file));
    51         
    52         // 判断文件有有多少字节可以读
    53         byte[] buffer = new byte[fis.available()];
    54         fis.read(buffer);
    55         fis.close();
    56  
    57         // 清空response
    58         response.reset();
    59          
    60         /**
    61          *  设置response的Header,必须设。
    62          *  【几个头文件简介】:
    63          *  1、Content-disposition是MIME协议的扩展,此协议可让浏览器弹出下载框。同时可以改变下载时文件的文件名。
    64          *  2、Content-Length用于描述HTTP消息实体的传输长度。
    65          *    在HTTP协议中,消息实体长度和消息实体的传输长度是有区别,比如说gzip压缩下,消息实体长度是压缩前的长度,消息实体的传输长度是gzip压缩后的长度。
    66          */
    67         response.addHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes("utf-8"),"ISO-8859-1"));
    68         response.addHeader("Content-Length", "" + file.length());
    69         OutputStream out = new BufferedOutputStream(response.getOutputStream());
    70         
    71         /**
    72          *  配置MIME类型,通知浏览器下载的文件的格式。
    73          *  更多   MIME类型  和  后缀名   的映射可在百度文库搜索 : “MIME类型大全” 或者戳中连接:
    74          *  http://wenku.baidu.com/link?url=SIJffXFE68HnvhI39h0c0PtjSzz7v8SoYzo274HcEx8jYRm-V07_WkotLQdVnT_JGyNhIUY_bjQRgnfz_b53rg5EnHD_ist84Pq-uWMYjyG
    75          */
    76         response.setContentType("application/octet-stream");
    77  
    78         // 输出
    79         out.write(buffer);
    80         out.flush();
    81         out.close();
    82     }
    83 }
  • 相关阅读:
    Java中new关键字和newInstance方法的区别
    一道关于简单界面设计的练习题
    一道关于接口的练习题
    SPSS与聚类分析
    Nunit中文文档
    对比MS Test与NUnit Test框架
    Unit Test单元测试时如何模拟HttpContext
    如何vs升级后10和12都能同时兼容
    LINQ 从 CSV 文件生成 XML
    使用FileSystemWatcher监视文件变化
  • 原文地址:https://www.cnblogs.com/xiaoMzjm/p/3878835.html
Copyright © 2020-2023  润新知