【问题标题】:values of input text fields in a html multipart formhtml多部分表单中输入文本字段的值
【发布时间】:2011-08-09 11:42:01
【问题描述】:

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

  1. 指定的目的地 填写电子邮件地址 目标邮箱

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

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

【问题讨论】:

    标签: java file-upload apache-commons


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      您可以使用相同的 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);
          }
      
          // ...
      }
      

      【讨论】:

      • 也许这是一个愚蠢的问题,但我不能使用 item.getString ,因为 getString 不是 FileItem 类或其祖先中的方法......请告诉我如何处理这个
      • 它肯定在 API commons.apache.org/fileupload/apidocs/org/apache/commons/… 显然你根本没有使用 Apache Commons FileUpload?
      【解决方案3】:

      这是我为此目的使用的:

          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");

      【讨论】:

        【解决方案4】:

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

        谢谢

        【讨论】:

          猜你喜欢
          • 2021-11-02
          • 2020-07-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-09-07
          • 1970-01-01
          相关资源
          最近更新 更多