Java--Servlet MultipartRequest实现上传文件

网友投稿 1199 2022-05-30

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

html示例代码

upload.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;

Java--Servlet MultipartRequest实现上传文件

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

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.(MultipartParser.java:172)

com.oreilly.servlet.MultipartRequest.(MultipartRequest.java:222)

com.oreilly.servlet.MultipartRequest.(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.(MultipartParser.java:166)

com.oreilly.servlet.MultipartRequest.(MultipartRequest.java:222)

com.oreilly.servlet.MultipartRequest.(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

Java Servlet

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Spring MVC-07循序渐进之验证器 下 (JSR 303验证)
下一篇:立省万元,HUAWEI DevEco Studio 分布式模拟器体验
相关文章