11

我正在使用从.(使用和)apache-commons-fileupload获取文件。clientserverJSPServlet

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>

小服务程序:GetFile

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

我能够将文件上传到服务器,但我无法获取 中的值text1servlet我正在获取中的null值),我需要在表单中提交一些附加信息,同时将其上传到.text1servlettextfieldserver

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

5 回答 5

14

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

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

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

是的,就目前而言。使用enctype="multipart/form-data"时不能通过使用直接获取参数request.getParameter(name);。在使用它时,表单字段不能作为请求的参数,它们包含在流中,因此您无法以正常方式获取它。您可以在使用 commons-fileupload# Processing the upload items的文档中找到一种方法。

于 2013-02-27T06:17:24.393 回答
14

那么参数并没有丢失,只是它们是请求流的一部分。

您必须从请求中获取所有项目并根据项目类型进行相应的迭代和处理

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);
    }
}
于 2013-02-27T06:36:05.057 回答
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

于 2015-07-20T09:57:09.047 回答
0
  1. 下载 jar 文件 com.oreilly.servlet.MultipartRequest
  2. 导入com.oreilly.servlet.MultipartRequest你的 servlet/.java 文件中包含的Web-Inf/classes
  3. 在您的 servletdoPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {方法中添加

    MultipartRequest m=new MultipartRequest(request, "C:\SavingDirectory");

然后从下面的表格中调用您的变量;

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

并从 servlet 打印它们,例如out.println(pdate);

于 2013-05-27T14:04:24.557 回答
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>
于 2014-02-05T08:48:08.427 回答