- 文章非原创,参考链接见文末!
- 常见的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 page </ title >
- </ 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" %>
- <html>
- <body>
- 选择要上传的文件:<br />
- <form action="accept.jsp" method= "post" enctype= "multipart/form-data" >
- <input type="file" name= "boy" size= "38" >
- <br />
- <input type="hidden" id= "tt" name= "t" value= "1" />
- <input type="submit" id= "gg" name= "g" value= "提交" />
- </form>
- </body>
- </html>
- accept.jsp
- <%@page contentType= "text/html;charset=GB2312" %>
- <%@ page import = "java.io.*" %>
- <HTML>
- <BODY>
- <%
- //经测试,说明: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("文件已经上传" );
- %>
- <a href="c:\\test\\a.txt" >查看结果</a>
- </body>
- </HTML>
- -----------------------------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 >
参考链接: