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

时间:2011-04-20 12:45:41

标签: java file-upload apache-commons

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

  1. 将成为目的地 充满了电子邮件地址 目的地邮箱

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

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

4 个答案:

答案 0 :(得分:6)

我猜你正在使用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接口上的一个方法。

答案 1 :(得分:5)

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

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    try {
        List<FileItem> 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);
    }

    // ...
}

答案 2 :(得分:1)

这是我为此目的使用的:

    public static Hashtable getParamsFromMultipartForm(HttpServletRequest req) throws 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());
            }
        }
        return ret;
    }

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

//at the beginning of a servlet
Hashtable multipartParams = TheClassWhereIPutThatMethod.getParamsFromMultipartForm(req);

String myParamFromForm = multipartParams.get("myParamFromForm");

答案 3 :(得分:1)

所以,我所做的是使用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
                    }   

由于