- 文章非原创,参考链接见文末!
- 常见的MIME类型如下表:
序号 |
内容类型 |
文件扩展名 |
描述 |
1 |
application/msword |
doc |
Microsoft Word |
2 |
application/octet-stream bin |
dms lha lzh exe class |
可执行程序 |
3 |
application/pdf |
|
Adobe Acrobat |
4 |
application/postscript |
ai eps ps |
PostScript |
5 |
appication/powerpoint |
ppt |
Microsoft Powerpoint |
6 |
appication/rtf |
rtf |
rtf 格式 |
7 |
appication/x-compress |
z |
unix 压缩文件 |
8 |
application/x-gzip |
gz |
gzip |
9 |
application/x-gtar |
gtar |
tar 文档 (gnu 格式 ) |
10 |
application/x-shockwave-flash |
swf |
MacroMedia Flash |
11 |
application/x-tar |
tar |
tar(4.3BSD) |
12 |
application/zip |
zip |
winzip |
13 |
audio/basic |
au snd |
sun/next 声音文件 |
14 |
audio/mpeg |
mpeg mp2 |
Mpeg 声音文件 |
15 |
audio/x-aiff |
mid midi rmf |
Midi 格式 |
16 |
audio/x-pn-realaudio |
ram ra |
Real Audio 声音 |
17 |
audio/x-pn-realaudio-plugin |
rpm |
Real Audio 插件 |
18 |
audio/x-wav |
wav |
Microsoft Windows 声音 |
19 |
image/cgm |
cgm |
计算机图形元文件 |
20 |
image/gif |
gif |
COMPUSERVE GIF 图像 |
21 |
image/jpeg |
jpeg jpg jpe |
JPEG 图像 |
22 |
image/png |
png |
PNG 图像 |
text/html HTML
text/plain TXT
text/xml XML
text/json json字符串
此外不同浏览器下对同一个文件上传后获取到的类型可能不同。
1、文件下载:
文件下载的关键代码在于:
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=GB18030">
- <title>download pagetitle>
- head>
- <body>
- <a href="loadFile?filename=test.txt&path="+escape("C:/test.txt")>Download It!a>
- body>
- html>
LoadFile类如下:
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.IOException;
- import java.io.OutputStream;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- public class LoadFile extends HttpServlet {
- public void doGet(HttpServletRequest request, HttpServletResponse response)
- throws IOException, ServletException {
- String filename = request.getParameter("filename");
- String path = request.getParameter("path");
- OutputStream o = response.getOutputStream();
- byte b[] = new byte[1024];
- // the file to download.
- File fileLoad = new File(path);
- // the dialogbox of download file.
- response.setHeader("Content-disposition", "attachment;filename="
- + "test.txt");
- // set the MIME type.
- response.setContentType("text/html");
- // get the file length.
- long fileLength = fileLoad.length();
- String length = String.valueOf(fileLength);
- response.setHeader("Content_Length", length);
- // download the file.
- FileInputStream in = new FileInputStream(fileLoad);
- int n = 0;
- while ((n = in.read(b)) != -1) {
- o.write(b, 0, n);
- }
- }
- public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
- doGet(request, response);
- }
- }
- test.jsp
- <%@page contentType="text/html;charset=GB2312"%>
- 选择要上传的文件:
- method="post" enctype="multipart/form-data">
- "file" name="boy" size="38">
-
- "hidden" id="tt" name="t" value="1" />
- "submit" id="gg" name="g" value="提交" />
- accept.jsp
- <%@page contentType="text/html;charset=GB2312"%>
- <%@ page import="java.io.*"%>
- <%
- //经测试,说明:ServletInputStream类中的readLine(byte[] b, int off, int len)
- //其中参数 byte[] b 起缓冲作用,此方法一次读取一行,但如果 byte[] b 定义的大小,比要读取的一行需占用的空间要小,则
- //该方法只读取 byte[] b 指定的大小;再次读取时会继续接着上次未读完的读取;返回值 :返回实际读取的字节数,当读到文档流的
- //最后时返回-1。
- try{
- ServletInputStream in=request.getInputStream();
- File f=new File("c:\\test","a.txt");
- FileOutputStream o=new FileOutputStream(f);
- //如果byte b[]=设置的值太短的话(假如设置为2),那么在 应用的 上传操作时会有影响,具体表现为无法解析文档路径等相关信息
- byte b[]=new byte[2046];
- int n;
- int i = 0;
- while((n=in.readLine(b,0,b.length))!=-1)//ServletInputStream.readLine方法是逐行读取的。当它读完整个文件,返回-1,一般情况下返回读取的字节数
- {
- i++;
- System.out.println("------"+i);
- o.write(b,0,n);
- }
- o.close();
- in.close();
- }catch(IOException e){
- e.printStackTrace();
- }
- out.print("文件已经上传");
- %>
- "c:\\test\\a.txt">查看结果
- -----------------------------7db2611a404a4
- Content-Disposition: form-data; name="boy"; filename="C:\Users\xijiang\Desktop\test.txt"
- Content-Type: text/plain
- Hello World!
- Hello World!
- Hello World!
- -----------------------------7db2611a404a4
- Content-Disposition: form-data; name="t"
- 1
- -----------------------------7db2611a404a4
- Content-Disposition: form-data; name="g"
- 提交
- -----------------------------7db2611a404a4--
- -----------------------------7db2611a404a4
- 是字段间隔符。
- <pre name="code" class="html" style="background-color: rgb(255, 255, 255); text-align: -webkit-left; ">-----------------------------7db2611a404a4--pre>
- <pre>pre>
- <pre name="code" class="html" style="background-color: rgb(255, 255, 255); text-align: -webkit-left; "> 是结束符。pre><pre name="code" class="html" style="background-color: rgb(255, 255, 255); text-align: -webkit-left; "> <input type="file">对应的值表示为:pre><pre name="code" class="html" style="background-color: rgb(255, 255, 255); text-align: -webkit-left; "><pre name="code" class="html" style="background-color: rgb(255, 255, 255); text-align: -webkit-left; ">-----------------------------7db2611a404a4
- Content-Disposition: form-data; name="boy"; filename="C:\Users\jxq\Desktop\test.txt"
- Content-Type: text/plain
- Hello World!
- Hello World!
- Hello World!pre><pre name="code" class="html" style="background-color: rgb(255, 255, 255); text-align: -webkit-left; "> 即第一行是 Content-Disposition、name和客户端上传的文件的目录,第二行是上传的文件类型,第三行是空行,接下来是文件内容。pre><pre name="code" class="html" style="background-color: rgb(255, 255, 255); text-align: -webkit-left; "> 而表单提交的其他属性值则是通过 Content-Disposition: from-dat; name=xx 来表示。pre><pre name="code" class="html" style="background-color: rgb(255, 255, 255); text-align: -webkit-left; "> 所以为了获取上传的文件的真正内容,我们不能简单地读取从request获得的输入流,必须进一步解析。pre>
- <pre>pre>
- <pre name="code" class="html" style="background-color: rgb(255, 255, 255); text-align: -webkit-left; ">pre>pre>
- <pre>pre>
- <pre>pre>
- <pre>pre>
参考链接:
http://blog.csdn.net/kanaka10/article/details/6526630
http://zhangjunhd.blog.51cto.com/113473/19631