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

aur*_*rel 7 java file-upload apache-commons

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

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

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

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

小智 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);
Run Code Online (Sandbox Code Playgroud)

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


Bal*_*usC 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);
    }

    // ...
}
Run Code Online (Sandbox Code Playgroud)

  • 也许这是一个愚蠢的问题,但我不能使用item.getString,因为getString不是FileItem类或其祖先中的方法...请告诉我如何处理这个问题 (5认同)