【问题标题】:How to save more than one paramerters passed to a servlet from a multipart form?如何保存从多部分表单传递给 servlet 的多个参数?
【发布时间】:2014-02-24 19:48:38
【问题描述】:

我不知道如何使用getParts() 来保存参数。

我正在尝试将 4-5 个文本类型的输入与图像文件一起传递。我想将参数检索到字符串中,以便将它们添加到数据库中并将图像以 blob 格式保存在数据库中(而不是在服务器目录中)。

任何帮助将不胜感激。提前致谢

<form class="form-signin" action="createAlbum"
        method="post" enctype="multipart/form-data" role="form">
    <h2 class="form-signin-heading">
        Add details to create an Album.
    </h2>
    <input type="text" name="aname"
        class="form-control" placeholder="Album Name" required>
    <input type="text" name="artists"
        class="form-control" placeholder="Artist" required>
    <input type="date" name="rdate"
        class="form-control" placeholder="Release Date" required >
    <input type="text" name="type"
        class="form-control" placeholder="Genre" required >
    <input type="text" name="price"
        class="form-control" placeholder="Price">
    <input type="file" name="picture"
        class="form-control" placeholder="Picture" required >
    <button class="btn btn-lg btn-primary btn-block"
        type="submit">Add Album</button>
</form>

【问题讨论】:

  • 您应该将您的Servlet 代码部分发布到您尝试检索参数的位置。如果不看一些代码,就没有真正的方法可以帮助您。如果您提供有关您尝试过的内容和结果的更多详细信息,也会有所帮助;是否有任何错误或异常?是否收到了一些参数,但没有收到其他参数?如果您提供更多详细信息,您将让那些想要帮助您更好地了解您的问题的人。
  • 不确定您正在使用的解决方案,但您可能会发现这有点用 commons.apache.org/proper/commons-fileupload/using.html
  • 我正在使用 getParts()。我不知道该怎么办。感谢@Leo,我使用了他们的库支持并完成了它。

标签: java html servlets multipartform-data


【解决方案1】:
PrintWriter out = response.getWriter();
       System.out.println("Request content length is " + request.getContentLength() + "<br/>"); 
       System.out.println("Request content type is " + request.getHeader("Content-Type") + "<br/>");
       boolean isMultipart = ServletFileUpload.isMultipartContent(request);
       if(isMultipart){
                  ServletFileUpload upload = new ServletFileUpload();
           try{
               FileItemIterator iter = upload.getItemIterator(request);
               FileItemStream item = null;
               String name = "";
               InputStream stream = null;
               while (iter.hasNext()){
                                     item = iter.next();
                                     name = item.getFieldName();
                                     stream = item.openStream();
                  if(item.isFormField()){System.out.println("Form field " + name + ": " 
                                           + Streams.asString(stream) + "<br/>");}
                  else {
                      name = item.getName();
                      System.out.println("name==" + name);
                      if(name != null && !"".equals(name)){
                         String fileName = new File(item.getName()).getName();
                         out.write("Client file: " + item.getName() + " <br/>with file name "
                                                    + fileName + " was uploaded.<br/>");
                         File file = new File(getServletContext().getRealPath("/WEB-INF/temp/" + fileName));
                         FileOutputStream fos = new FileOutputStream(file);
                         long fileSize = Streams.copy(stream, fos, true);
                         System.out.println("Size was " + fileSize + " bytes <br/>");
                         System.out.println("File Path is " + file.getPath() + "<br/>");
                      }
                  }
               }
           } catch(FileUploadException fue) {out.write("fue!!!!!!!!!");}
       } 

【讨论】:

    【解决方案2】:

    你可以试试 apache FileUpload

    http://commons.apache.org/proper/commons-fileupload/using.html

    那么你可以像这样处理你的多部分请求

    // Process the uploaded items
    Iterator<FileItem> iter = items.iterator();
    while (iter.hasNext()) {
    FileItem item = iter.next();
    
        if (item.isFormField()) {
            processFormField(item);
        } else {
            processUploadedFile(item);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2011-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-01
      • 2011-08-26
      • 1970-01-01
      • 2010-09-19
      相关资源
      最近更新 更多