这个问题已经在这里有一个答案:
- 如何使用JSP / Servlet来上传文件到服务器? 12个回答
是否有读取和传入的请求解析数据的任何方便的方式。
例如,客户端发起POST请求
URLConnection connection = new URL(url).openConnection();
connection.setDoOutput(true);
connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
PrintWriter writer = null;
try {
OutputStream output = connection.getOutputStream();
writer = new PrintWriter(new OutputStreamWriter(output, charset), true); // true = autoFlush, important!
// Send normal param.
writer.println("--" + boundary);
writer.println("Content-Disposition: form-data; name=\"param\"");
writer.println("Content-Type: text/plain; charset=" + charset);
writer.println();
writer.println(param);
我不能用得到PARAM request.getParameter("paramName")
下面的代码
BufferedReader reader = new BufferedReader(new InputStreamReader(
request.getInputStream()));
StringBuilder sb = new StringBuilder();
for (String line; (line = reader.readLine()) != null;) {
System.out.println(line);
}
然而,显示我的内容
-----------------------------29772313742745
Content-Disposition: form-data; name="name"
J.Doe
-----------------------------29772313742745
Content-Disposition: form-data; name="email"
abuse@spamcop.com
-----------------------------29772313742745
什么是解析传入的请求的最佳方式? 我不想写我自己的解析器,有可能是一个现成的解决方案。
multipart/form-data
编码请求确实不是由之前的3.0版本在Servlet API支持默认。 Servlet API的解析使用默认的参数application/x-www-form-urlencoded
编码。 当使用不同的编码,则request.getParameter()
调用都会返回null
。 当你已经在Servlet的3.0( Glassfish的3 , Tomcat的7 ,等等),那么你可以使用HttpServletRequest#getParts()
来代替。 也看到这个博客的扩展例子。
之前Servlet的3.0,一个事实上的标准解析multipart/form-data
请求将使用Apache的百科全书文件上传 。 只要仔细阅读其用户指南和常见问题解答部分以了解如何使用它。 我已经发布了代码示例的答案之前, 在这里 (也包含一个示例瞄准的Servlet 3.0)。
解决方案:
溶液A:
- 下载http://www.servlets.com/cos/index.html
- 调用上getParameters()
com.oreilly.servlet.MultipartRequest
方案B:
- 下载http://jakarta.Apache.org/commons/fileupload/
- 调用readHeaders()在
org.apache.commons.fileupload.MultipartStream
方案C:
- 下载http://users.boone.net/wbrameld/multipartformdata/
- 调用的getParameter上com.bigfoot.bugar.servlet.http.MultipartFormData
解决方案d:
使用Struts。 Struts 1.1中自动处理这一点。
参考: http://www.jguru.com/faq/view.jsp?EID=1045507
并不总是有一个上传的前一个servlet(我可以使用例如过滤器)。 或者可能是在同一个控制器(再次过滤器或还的servelt)可用于多种动作,所以我认为,依赖于servlet配置使用getPart方法(仅适用于Servlet API的> = 3.0),我不知道,我不喜欢。
在一般情况下,我更喜欢独立的解决方案,能够独自生活,在这种情况下http://commons.apache.org/proper/commons-fileupload/是那一个。
List<FileItem> multiparts = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);
for (FileItem item : multiparts) {
if (!item.isFormField()) {
//your operations on file
} else {
String name = item.getFieldName();
String value = item.getString();
//you operations on paramters
}
}
文章来源: Convenient way to parse incoming multipart/form-data parameters in a Servlet [duplicate]