Java--Servlet MultipartRequest实现上传文件

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

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

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

作者其他文章

评论(0

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

    全部回复

    上滑加载中

    设置昵称

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

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

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