MIME类型
在web开发中有MIME类型一说,它设计的最初目的是为了在发送电子邮件时附加多媒体数据的,让邮件客户程序能根据期类型进行处理(MIME意为多目 Internet邮件扩展)。
常见的MIME类型
- 超文本标记语言文本 .html,.html text/html
- 普通文本 .txt text/plain
- RTF文本 .rtf application/rtf
- GIF图形 .gif image/gif
- JPEG图形 .ipeg,.jpg image/jpeg
- au声音文件 .au audio/basic
- MIDI音乐文件 mid,.midi audio/midi,audio/x-midi
- RealAudio音乐文件 .ra, .ram audio/x-pn-realaudio
- MPEG文件 .mpg,.mpeg video/mpeg
- AVI文件 .avi video/x-msvideo
- GZIP文件 .gz application/x-gzip
- TAR文件 .tar application/x-tar
- .amr audio/amr
- .pmdaudio/pmd
- .3gp video/3gpp
- .cab application/vnd.smartpohone
- .hme application/vnd.smartphone.thm
- .jad text/vnd.sun.j2me.app-descriptor
- .jar application/java-archive
- .mp3 audio/x-mpeg
- .mp4 video/mp4
- .ogg application/ogg
- .pdb application/ebook
- .rm video/rm
- .rng application/vnd.nokia.ringing-tone
- .sdt application/vnd.sie.thm
- .sisx x-epoc/x-sisx-app
- .sis application/vnd.symbian.install
- .thm application/vnd.eri.thm
- .tsk application/vnd.ppc.thm
- .umd application/umd
- .utz application/vnd.uiq.thm
- .exe application/ocelet-stream
- .rar application/ocelet-stream
每个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();
}