发送具有多[重复]附加数据(Sending additional data with multipa

2019-07-20 14:39发布

这个问题已经在这里有一个答案:

  • 如何使用JSP / Servlet来上传文件到服务器? 12个回答

我使用的apache-commons-fileupload到得到文件clientserver 。(使用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"));

我能上传文件到服务器上,但我不能够得到的值text1servlet (我得到null的值text1servlet ),我需要这个textfield的形式提交一些额外的信息而上传到server

  • enctype="multipart/form-data"形式的选项不允许其他形式的数据所需提交? 如果它不让它再有什么其他选择我要这个额外发送textfieldserver
  • 或者有没有在我的代码的任何其他问题?

Answer 1:

enctype="multipart/form-data"形式的选项不允许其他形式的数据所需提交? 如果它不让它再有什么其他选择我有这个额外的文本框发送到服务器。

不存在与使用没有问题enctype="multipart/form-data" 。 你可以再等领域,在这样的形式提交。

或者有没有在我的代码的任何其他问题?

是的,现在是这样。 在使用enctype="multipart/form-data"你不能直接使用获得的参数request.getParameter(name); 。 而使用它,表单字段不能作为请求的参数,它们被包含在流中,所以你不能得到它的正常方式。 你可以找到一种方法来做到这一点使用公地文件上传的文档 ,下段处理上载的项目



Answer 2:

那么该参数不丢失,它只是他们的请求流的一部分。

你必须得到来自请求的所有项目和迭代,并处理它相应地根据自己的项目类型

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


Answer 3:

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对象



Answer 4:

  1. 下载jar文件com.oreilly.servlet.MultipartRequest
  2. 进口com.oreilly.servlet.MultipartRequest在你的servlet / java文件包含在Web-Inf/classes
  3. 在小服务程序doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {方法添加

    MultipartRequest M =新MultipartRequest(请求, “C:\ SavingDirectory”);

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

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

并且从像servlet的打印它们out.println(pdate);



Answer 5:

在Servlet来获取HTML表单字段的最佳做法是使用Apache公地文件上传1.3罐子。

通过多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>


文章来源: Sending additional data with multipart [duplicate]