使用multipart发送附加数据

时间:2013-02-27 06:07:15

标签: java jsp servlets file-upload apache-commons-fileupload

我正在使用apache-commons-fileuploadclient获取文件到server。(使用JSPServlet)。

JSP / HTML

<form method="POST" action="GetFile" enctype="multipart/form-data">
<input type="file" name="datafile">
<input type="text" name="text1">
<input type="submit" value="Next">
</form>

Servlet:GetFile

System.out.println(request.getParameter("text1"));

我可以将文件上传到服务器,但我无法在text1中获得servlet的值(我的null值{{1}在text1)中,我需要在表单中使用此servlet,以便在将其上传到textfield时提交一些其他信息。

  • 表单的server选项是否允许其他 要提交的表格数据?如果它不允许,那么我必须将此额外enctype="multipart/form-data"发送给textfield的其他选项。
  • 或者我的代码中还有其他问题吗?

5 个答案:

答案 0 :(得分:13)

参数不会丢失,只是它们是请求Stream的一部分。

您必须从请求中获取所有项目,并根据其项目类型

进行相应的迭代和处理
List  items = upload.parseRequest(request);

继承人如何得到它

// Process the uploaded items
Iterator iter = items.iterator();
while (iter.hasNext()) {
    FileItem item = (FileItem) iter.next();

    if (item.isFormField()) {

      String name = item.getFieldName();//text1
      String value = item.getString();

    } else {
        processUploadedFile(item);
    }
}

答案 1 :(得分:12)

  

表单的enctype="multipart/form-data"选项是否允许其他   要提交的表格数据?如果它不允许它那么是什么   其他选项我必须将此附加文本字段发送到服务器。

使用enctype="multipart/form-data"时没有问题。您可以获取其他字段,然后以这种形式提交。

  

或者我的代码中还有其他问题吗?

是的,至于现在。使用enctype="multipart/form-data"时,您无法使用request.getParameter(name);直接获取参数。使用它时,表单字段不可用作请求的参数,它们包含在流中,因此您无法以正常方式获取它。您可以在{{3>}的处理上传的项目部分下找到一种方法。

答案 2 :(得分:1)

MultipartRequest req = new MultipartRequest(request, UPLOAD_PATH, 1024 * 1024 * 1024);
    out.print(req.getParameter("contractNo"));
    out.println("<BR>");
    Enumeration files = req.getFileNames();
    while (files.hasMoreElements()) {
        String name = (String) files.nextElement();
        String filename = req.getFilesystemName(name);
        String type = req.getContentType(name);
        File uploadedFile = req.getFile("xlFile");
        FileInputStream fis = new FileInputStream(uploadedFile);
        BufferedReader in = new BufferedReader(new InputStreamReader(fis));

        FileWriter fstream = new FileWriter(UPLOAD_PATH + name, true);
        BufferedWriter out11 = new BufferedWriter(fstream);

        String aLine = null;
        while ((aLine = in.readLine()) != null) {
            //Process each line and add output to Dest.txt file
            out11.write(aLine);
            out11.newLine();
        }

        // do not forget to close the buffer reader
        in.close();

        // close buffer writer
        out11.close();
    }

上面的代码将读取文件以及其他表单数据,只需查看req.getParameter();对象的MultipartRequest req方法

答案 3 :(得分:0)

  1. 下载jar文件com.oreilly.servlet.MultipartRequest
  2. com.oreilly.servlet.MultipartRequest
  3. 中包含的servlet / .java文件中导入Web-Inf/classes 您的servlet中的
  4. doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {方法添加

    MultipartRequest m = new MultipartRequest(request,&#34; C:\ SavingDirectory&#34;);

  5. 然后从表单中调用您的变量,如下所示;

    String pdate = m.getParameter("plandate");
    

    并从servlet中打印出来,如out.println(pdate);

答案 4 :(得分:0)

在Servlet中检索HTML表单字段的最佳做法是使用apache commons-fileupload 1.3 jar。

使用迭代器迭代多部分HTTPServletRequest并使用for循环检查它是否为isFormField(),然后

   String item1=null,item2=null,item3=null;

    if(item.isFormField())
    {


        if(item.getFieldName().equals("field1"))
        {   
          item1=item.getString();
        }


        if(item.getFieldName().equals("field2"))
        {   
             item2=item.getString();
        }



        if(item.getFieldName().equals("field3"))
        {   
             item3=item.getString();
        }


    }

,你的HTML文件应该是这样的

<html>
<body>
<form action="servletname" method="post" enctype="multipart/form-data">

<input type="text" name="field1">
<input type="text" name="field2">
<input type="text" name="field3">
<input type="file" name="filetoupload">
<input type="submit" value="Upload">  

</form>
</body>
</html>