2013-02-27 50 views
7

Tôi đang sử dụng apache-commons-fileupload để nhận tệp từ client đến server. (Sử dụng JSPServlet).Gửi dữ liệu bổ sung với multipart

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

Tôi có thể tải lên các tập tin đến máy chủ, nhưng tôi không thể nhận được giá trị của text1 trong số servlet (Tôi nhận được null giá trị của text1 trong số servlet), tôi cần số này textfield dưới hình thức để gửi một số thông tin bổ sung trong khi tải nó lên server.

  • Tùy chọn biểu mẫu không cho phép dữ liệu biểu mẫu khác được gửi? nếu nó không cho phép thì các tùy chọn khác tôi phải gửi thêm textfield này là gì server.
  • Hoặc có bất kỳ sự cố nào khác trong mã của tôi không?
+0

bạn có thể sử dụng javascript hoặc jquery để đặt dữ liệu trong trường văn bản – Biswajit

+5

@Biswajit không liên quan gì đến vấn đề của OP. – Uooo

+0

Có thể là bạn có nhiều trường nhập hơn với 'name =" text1 "'? Nguyên nhân 'request.getParameter (...)' chỉ nhận giá trị đầu tiên của một tham số, nếu bạn có nhiều hơn với cùng thuộc tính 'name' thì thuộc tính đầu tiên có thể rỗng và do đó null. – Uooo

Trả lời

9

enctype="multipart/form-data" lựa chọn hình thức không cho phép dữ liệu hình thức khác được đệ trình? nếu nó không cho phép thì các tùy chọn khác là tôi phải gửi trường văn bản bổ sung này tới máy chủ.

Không có vấn đề gì khi sử dụng enctype="multipart/form-data". Bạn có thể nhận được các lĩnh vực khác sau đó tập tin ở dạng như vậy.

Hoặc có bất kỳ sự cố nào khác trong mã của tôi không?

Vâng, như hiện tại. Trong khi sử dụng enctype="multipart/form-data" bạn không thể trực tiếp nhận được thông số bằng cách sử dụng request.getParameter(name);. Trong khi sử dụng nó, các trường biểu mẫu không có sẵn dưới dạng tham số của yêu cầu, chúng được bao gồm trong luồng, do đó bạn không thể lấy trường đó theo cách thông thường. Bạn có thể tìm cách để thực hiện việc này trong the docs of using commons-fileupload, trong phần Xử lý các mục đã tải lên.

+0

cảm ơn (và +1), nó hoạt động. – Bhushan

9

Các tham số không bị mất, chỉ là các tham số của chúng là một phần của luồng yêu cầu.

Bạn có để có được tất cả các mục từ Yêu cầu và lặp và xử lý nó cho phù hợp dựa trên loại mục của họ

List items = upload.parseRequest(request); 

Heres làm thế nào bạn có thể lấy nó

// 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); 
    } 
} 
+0

cảm ơn (và +1), nó hoạt động. – Bhushan

0
  1. tải về jar tệp com.oreilly.servlet.MultipartRequest
  2. nhập com.oreilly.servlet.MultipartRequest trong servlet của bạn /.file java chứa trong Web-Inf/classes
  3. trong servlets của bạn doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { phương pháp thêm

    MultipartRequest m = new MultipartRequest (yêu cầu, "C: \ SavingDirectory");

rồi gọi biến của bạn từ biểu mẫu như sau;

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

và in chúng ra khỏi servlet như out.println(pdate);

0

Cách tốt nhất để lấy biểu mẫu form HTML trong Servlet là sử dụng commons-FileUpload 1.3 jar apache.

Sử dụng iterator lặp qua HttpServletRequest nhiều phần dữ liệu và sử dụng một vòng lặp for để kiểm tra xem nó isFormField(), sau đó

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


    } 

và tập tin HTML của bạn nên được như thế này

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

Trên mã sẽ đọc tệp cùng với dữ liệu biểu mẫu khác chỉ cần xem req.getParameter(); phương thức MultipartRequest req đối tượng

Các vấn đề liên quan