Java--Servlet MultipartRequest实现上传文件
MultipartReques类主要是对文件上传进行的处理,在上传文件时,编码格式为enctype="multipart/form-data"格式,以二进制形式提交数据,提交方式为post方式。
html示例代码
-
<!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>
-
</form>
-
<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>
Java示例代码
-
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
文章来源: blog.csdn.net,作者:吾日三省贾斯汀,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/JustinQin/article/details/78542768
- 点赞
- 收藏
- 关注作者
评论(0)