Java--Servlet MultipartRequest实现上传文件

举报
吾日三省贾斯汀 发表于 2021/09/10 00:14:45 2021/09/10
【摘要】 MultipartReques类主要是对文件上传进行的处理,在上传文件时,编码格式为enctype="multipart/form-data"格式,以二进制形式提交数据,提交方式为post方式。  html示例代码 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transi...

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

html示例代码


  
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  2. <html>
  3. <head>
  4. <title>upload.html</title>
  5. <meta http-equiv="content-type" content="text/html; charset=GBK">
  6. </head>
  7. </form>
  8. <body>
  9. <form name="UploadForm" enctype="multipart/form-data" method="post" action="test">
  10. 用户名:<input type="text" id="userName" name="userName"/><br>
  11. 密码:<input type="password" id="password" name="password" /><br>
  12. <input type="file" name="File1" size="20" maxlength="20"><br>
  13. <input type="file" name="File2" size="20" maxlength="20"><br>
  14. <input type="submit"value="上传">
  15. </form>
  16. </body>
  17. </html>

Java示例代码


  
  1. package test;
  2. import java.io.File;
  3. import java.io.IOException;
  4. import java.util.Enumeration;
  5. import javax.servlet.ServletException;
  6. import javax.servlet.http.HttpServlet;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9. import com.oreilly.servlet.MultipartRequest;
  10. @SuppressWarnings("serial")
  11. public class TestServlet extends HttpServlet {
  12. @Override
  13. public void service(HttpServletRequest request, HttpServletResponse response)
  14. throws ServletException, IOException {
  15. MultipartRequest mr=null;
  16. //用来限制用户上传文件大小的
  17. int maxPostSize = 1 * 100 * 1024 * 1024;
  18. //第一个参数为传过来的请求HttpServletRequest,
  19. //第二个参数为上传文件要存储在服务器端的目录名称
  20. //第三个参数是用来限制用户上传文件大小
  21. //第四个参数可以设定用何种编码方式来上传文件名称,可以解决中文问题
  22. mr = new MultipartRequest(request, "E:\\zhang", maxPostSize, "GBK");
  23. //传回所有文件输入类型的名称
  24. Enumeration files = mr.getFileNames();
  25. String fileName = "";
  26. String filePath="";
  27. while (files.hasMoreElements()) {
  28. fileName = (String) files.nextElement();
  29. System.out.println("FileName============"+fileName);
  30. //用此方法得到上传文件的真正的文件名,这里的fileName指文件输入类型的名称
  31. filePath = mr.getFilesystemName(fileName);
  32. System.out.println("FilePath============"+filePath);
  33. //此方法得到一个文件对象,代表储存在服务器上的fileName文件
  34. File f = mr.getFile(fileName);
  35. if (null == f)
  36. throw new ServletException("file is not exist");
  37. }
  38. //可以取得请求参数的名称
  39. Enumeration enum1=mr.getParameterNames();
  40. while (enum1.hasMoreElements()) {
  41. String s=(String)enum1.nextElement();
  42. System.out.println(s);
  43. String[] str=mr.getParameterValues(s);
  44. for (int i=0;i<str.length;i++){
  45. System.out.println(str[i]);
  46. }
  47. }
  48. }
  49. }

运行后结果

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

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。