文件下载

    在web开发中有MIME类型一说,它设计的最初目的是为了在发送电子邮件时附加多媒体数据的,让邮件客户程序能根据期类型进行处理(MIME意为多目Internet邮件扩展)。

常见的MIME类型

超文本标记语言文本  .html, .html        text/html

普通文本                      .txt                   txt/plain             

JPEG图形                     .ipeg, .jpeg        image/jpeg

GIF图形                       .gif                    image/gif

RTF文本                      .rtf                     application/rtf

RealAudio音乐文件     .ra, .ram             audio/x-pn-realaudio

au声音文件                 .au                      audio/basic

MIDI音乐文件           .mid, .midi            audio/midi, audio/x-midi

Word文档                  .doc                     application/msword

Excel文档                   .xls                      application/vnd.ms-excel

TAR文件                    .tar                      application/x-tar

AVI文件                     .avi                      video/x-msvideo

GZIP文件                   .gz                       application/x-gzip

MPEG文件                .mpg, .mpeg         video/mpeg

每个MIME类型由两部分组成,前面是数据的大类别,例如声音audio、图象image等,后面定义具体的种类。

      这些定义使浏览器能够首先尝试打开操作,但操作不成功就提示下载对话框,要想浏览器一定能弹出对话框,可以对response设置一个浏览器永远也不认识的MIME类型,其实也有更好的方法。

在响应头中设置Content-disposition属性,如:response.setHeader("Content-disposition", "attachment;filename=x.txt"); 该方法不但可以使浏览器弹出下载对话框,而且还可以指定默认的文件名,比要设置不认识的MIME类型要好的多。如果确定下载的文件类型,最好还是设置一下MIME类型,content-disposition响应头已经打开下载的对话框了,MIME类型就很容易的提示下载保存的文件类型。

使用Servlet做文件下载例子就很方便了

public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  String fileName = request.getParameter("file");
  
  response.setHeader("Content-disposition", "attachment;filename="+fileName);
  
  BufferedInputStream buffInputStr = new BufferedInputStream(new FileInputStream(fileName));
  BufferedOutputStream buffOutputStr = new BufferedOutputStream(response.getOutputStream());
  int length = -1;
  byte[] b = new byte[1024];
  while ((length=buffInputStr.read(b))!=-1) {
   buffOutputStr.write(b, 0, length);
  }
  buffOutputStr.flush();
  buffInputStr.close();
  buffOutputStr.close();
  
 }

 

还有一种

public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  
   response.setContentType("application/x-msdownload");
   response.addHeader("Content-Disposition", "attachment;filename=lyc.txt");
   
   ServletOutputStream sos =response.getOutputStream();
   sos.write("Hello Word! Hello China! I Love You!".getBytes());
   sos.close();
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值