MultipartRequest上传文件

http://zhanghy0525-126-com.iteye.com/blog/1452465

 

MultipartReques类主要是对文件上传进行的处理,在上传文件时,编码格式为enctype="multipart/form-data"格式,以二进制形式提交数据,提交方式为post方式。

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
  <head> 
    <title>upload.html</title> 
    <meta http-equiv="content-type" content="text/html; charset=GBK"> 
  </head> 
  <body> 
<form name="UploadForm" enctype="multipart/form-data" method="post" action="test"> 
用户名:<input type="text" id="userName" name="userName"/><br> 
    密码:<input type="password" id="password" name="password" /><br> 
<input type="file" name="File1" size="20" maxlength="20"><br> 
<input type="file" name="File2" size="20" maxlength="20"><br> 
<input type="submit"value="上传"> 
</form> 
  </body> 
</html> 

再写一个servlet用于处理请求,代码如下:
package test; 

import java.io.File; 
import java.io.IOException; 
import java.util.Enumeration; 

import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

import com.oreilly.servlet.MultipartRequest; 

@SuppressWarnings("serial") 
public class TestServlet extends HttpServlet { 
@Override 
public void service(HttpServletRequest request, HttpServletResponse response) 
throws ServletException, IOException { 
MultipartRequest mr=null; 
//用来限制用户上传文件大小的 
int maxPostSize = 1 * 100 * 1024 * 1024; 
//第一个参数为传过来的请求HttpServletRequest, 
//第二个参数为上传文件要存储在服务器端的目录名称 
//第三个参数是用来限制用户上传文件大小 
//第四个参数可以设定用何种编码方式来上传文件名称,可以解决中文问题 
mr = new MultipartRequest(request, "E:\\zhang", maxPostSize, "GBK"); 
//传回所有文件输入类型的名称 
Enumeration files = mr.getFileNames(); 
String fileName = ""; 
String filePath=""; 
while (files.hasMoreElements()) { 
fileName = (String) files.nextElement(); 
System.out.println("FileName============"+fileName); 
//用此方法得到上传文件的真正的文件名,这里的fileName指文件输入类型的名称 
filePath = mr.getFilesystemName(fileName); 
System.out.println("FilePath============"+filePath); 
//此方法得到一个文件对象,代表储存在服务器上的fileName文件 
File f = mr.getFile(fileName); 
if (null == f) 
throw new ServletException("file is not exist"); 
} 
//可以取得请求参数的名称 
Enumeration enum1=mr.getParameterNames(); 
while (enum1.hasMoreElements()) { 
String s=(String)enum1.nextElement(); 
System.out.println(s); 
String[] str=mr.getParameterValues(s); 
for (int i=0;i<str.length;i++){ 
System.out.println(str[i]); 
} 
} 
} 

} 


得到的结果如下:

16:36:16,346 INFO  [STDOUT] FileName============File2
16:36:16,346 INFO  [STDOUT] FilePath============新建 文本文档.txt
16:36:16,346 INFO  [STDOUT] FileName============File1
16:36:16,346 INFO  [STDOUT] FilePath============test.txt
16:36:16,346 INFO  [STDOUT] password
16:36:16,346 INFO  [STDOUT] zhy
16:36:16,346 INFO  [STDOUT] userName
16:36:16,346 INFO  [STDOUT] zhang
若出现异常如下,则是maxPostSize 设置太小,文件太大
exception :

java.io.IOException: Posted content length of 785 exceeds limit of 1
com.oreilly.servlet.multipart.MultipartParser.<init>(MultipartParser.java:172)
com.oreilly.servlet.MultipartRequest.<init>(MultipartRequest.java:222)
com.oreilly.servlet.MultipartRequest.<init>(MultipartRequest.java:173)
test.TestServlet.service(TestServlet.java:22)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)

若出现异常如下,则提交方式应该为post提交,或编码形式为enctype="multipart/form-data"

exception:
java.io.IOException: Posted content type isn't multipart/form-data
com.oreilly.servlet.multipart.MultipartParser.<init>(MultipartParser.java:166)
com.oreilly.servlet.MultipartRequest.<init>(MultipartRequest.java:222)
com.oreilly.servlet.MultipartRequest.<init>(MultipartRequest.java:173)
test.TestServlet.service(TestServlet.java:26)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)


关于此类的API详看
http://www.servlets.com/cos/javadoc/com/oreilly/servlet/MultipartRequest.html

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值