html多部分表单中输入文本字段的值

我在一个java服务器端应用程序中使用Apache Commons FileUpload,该应用程序具有带字段的html表单:

  1. 将填充目标邮箱的电子邮件地址的目标

  2. 带有发件人消息的消息文本

  3. 用于上传照片的<input type=file ...字段。 我可以接收上传的文件(作为流),但我如何访问1)和2)表单值(由应用程序的用户完成)? 非常感谢,Aurel

您可以使用相同的API接收它们。 只需在FileItem#isFormField()返回true时挂钩。 如果它返回false那么它就是你可能已经使用的上传文件。

 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { List items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request); for (FileItem item : items) { if (item.isFormField()) { // Process regular form field (input type="text|radio|checkbox|etc", select, etc). String fieldname = item.getFieldName(); String fieldvalue = item.getString(); // ... (do your job here) } else { // Process form file field (input type="file"). String fieldname = item.getFieldName(); String filename = FilenameUtils.getName(item.getName()); InputStream filecontent = item.getInputStream(); // ... (do your job here) } } } catch (FileUploadException e) { throw new ServletException("Cannot parse multipart request.", e); } // ... } 

我猜你正在使用FileItemIterator来迭代请求中的项目。 迭代器next()方法返回FileItemStream(不是FileItem)。 打开该对象上的流并将其转换为如下字符串:

 import org.apache.commons.fileupload.util.Streams; ... FileItemStream item = iterator.next(); InputStream stream = item.openStream(); String name = item.getFieldName(); String value = Streams.asString(stream); 

其他答案建议的getString方法是FileItem接口上的方法。

这是我为此目的使用的:

     public static Hashtable getParamsFromMultipartForm(HttpServletRequest req)抛出FileUploadException {
         Hashtable ret = new Hashtable();
         List items = new ServletFileUpload(new DiskFileItemFactory())。parseRequest(req);
         for(FileItem item:items){
             if(item.isFormField()){
                 ret.put(item.getFieldName(),item.getString());
             }
         }
        返回;
     }

然后,每当我需要任何我的参数的价值时,我只会写,说:

 //在servlet的开头
 Hashtable multipartParams = TheClassWhereIPutThatMethod.getParamsFromMultipartForm(req); 

字符串myParamFromForm = multipartParams.get(“myParamFromForm”);

所以,我所做的是使用fileItem的实例,如:

 Hashtable incoming = new Hashtable(); fileName = sfu.parseRequest(request); //iterating over each uploaded file and storing the values of different parameters in the HashTable (incoming) for(FileItem f:fileName) { incoming.put(f.getFieldName(), f.getString()); } //utilizing that HashTable and getting the value of desired field in the below manner, as in my case i required the value of "permissions" from the jsp page for(FileItem f:fileName) { String role= (String)incoming.get("permission"); //as it is a multipart form request, so need to get using this } 

谢谢