使用 multipart/form-data 时如何从请求中获取字符串参数? [复制]
Posted
技术标签:
【中文标题】使用 multipart/form-data 时如何从请求中获取字符串参数? [复制]【英文标题】:how to get string parameter from request when using multipart/form-data? [duplicate] 【发布时间】:2012-05-09 21:02:54 【问题描述】:我制作 html 页面来上传带有描述形式的文本框的图像。 我使用了 multipart/form-data ;在servlet的dopost中,我使用 ServletFileUpload 上传 = 新的 ServletFileUpload();
为了获取字符串参数,我使用了 request.getparameter(); 但它总是给我NULL ??? 我怎样才能得到它??
html ::
<form name="filesForm" action="/upload" method="post" enctype="multipart/form-data">
File : <input type="file" name="file">
<textarea name = "description"
rows = "4" cols = "30">Enter comments here.</textarea>
<input type="submit" name="Submit" value="Upload File">
在小服务程序上:
ServletFileUpload upload = new ServletFileUpload();
upload.setSizeMax(500000000);
FileItemIterator iterator = null;
try
iterator = upload.getItemIterator(req);
catch (FileUploadException e)
// TODO Auto-generated catch block
e.printStackTrace();
// to handle contents or
// instances of request.
FileItemStream item = null;
try
item = iterator.next();
catch (FileUploadException e)
// TODO Auto-generated catch block
e.printStackTrace();
// get access each item on iterator.
java.io.InputStream in = item.openStream(); // allows to read the items contents.
Blob imageBlob = new Blob(IOUtils.toByteArray(in)); // store each item on Blob
// object after converting them to Bytes.
/*……….
Note: we are concerned on uploading images files. So the type of files is either (.jpg or gif)
……….
*/
PersistenceManager pm = PMF.get().getPersistenceManager();
String counter="1";
ServletOutputStream outt = resp.getOutputStream();
//match incoming request Content type and invoke appropriate method for handel request
【问题讨论】:
【参考方案1】:因为当你有表单enctype="multipart/form-data"
。使用request.getParameter("paramnName");
无法获取其他表单字段。它总是会给你NULL。
您必须使用FormItem
的isFormField()
来检查其是否为常规字段或文件。
例子:
try
ServletFileUpload upload = new ServletFileUpload();
response.setContentType("text/plain");
FileItemIterator iterator = upload.getItemIterator(request);
while (iterator.hasNext())
FileItemStream item = iterator.next();
InputStream stream = item.openStream();
if (item.isFormField())
System.out.println("Got a form field: " + item.getFieldName() + " " +item);
else
System.out.println("Got an uploaded file: " + item.getFieldName() +
", name = " + item.getName());
int len;
byte[] buffer = new byte[8192];
while ((len = stream.read(buffer, 0, buffer.length)) != -1)
response.getOutputStream().write(buffer, 0, len);
catch (FileUploadException e)
// TODO Auto-generated catch block
e.printStackTrace();
【讨论】:
怎么样?能给我举个例子吗??? 我尝试过,但现在它给了我例外 java.lang.NoClassDefFoundError: java.rmi.server.UID 是一个受限类。有关详细信息,请参阅 Google App Engine 开发人员指南。在 com.google.appengine.tools.development.agent.runtime.Runtime.reject(Runtime.java:51) 在 org.apache.commons.fileupload.disk.DiskFileItem.DiskFileItemFactory
和GAE
。检查此链接***.com/questions/9501527/… 并编辑示例
System.out.println("Got a form field: " + item.getFieldName() + " " +item);
行不打印相应表单字段的值。请问如何获取表单字段的值?【参考方案2】:
添加答案并解决问题@Sayo Oladeji
要获取输入字段的值,您可以使用以下命令:
System.out.println("Got a form field: " + item.getFieldName() + " " + Streams.asString(stream));
【讨论】:
以上是关于使用 multipart/form-data 时如何从请求中获取字符串参数? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
[转]如何使用multipart/form-data格式上传文件
使用 ajax 提交 multipart/form-data 时,文件为空
使用 Windows Mobile 的 HTTPWebrequest (multipart/form-data) 上传文件