2013-11-25 32 views
1

我目前正在開發一個動態的web應用程序,我希望用戶能夠一次上傳多個文件以供應用程序使用。我不知道用戶一次可以上傳多少個文件;它可能是2或者它可能有100多個文件。我是JSP動態Web應用程序的新手,我已經開始使用單個上傳文件,但我不確定從哪裏開始。我查看了一些搜索的例子,但我一直無法找到我正在尋找的東西。這是我到目前爲止有:使用jsp和servlets上傳多個文件

的Servlet:

package Servlets; 
import java.io.File; 
import java.io.IOException; 
import java.io.PrintWriter; 
import java.util.Iterator; 
import java.util.List; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import org.apache.commons.fileupload.FileItem; 
import org.apache.commons.fileupload.FileItemFactory; 
import org.apache.commons.fileupload.FileUploadException; 
import org.apache.commons.fileupload.disk.DiskFileItemFactory; 
import org.apache.commons.fileupload.servlet.ServletFileUpload; 

public class UploadServlet extends HttpServlet 
{ 

private static final long serialVersionUID = 1L; 

    @Override 
     protected void doPost(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException 
      { 
      boolean isMultipart = ServletFileUpload.isMultipartContent(request); 
      response.setContentType("text/html"); 
      PrintWriter out = response.getWriter(); 
      if (isMultipart) 
      { 
       // Create a factory for disk-based file items 
       FileItemFactory factory = new DiskFileItemFactory(); 
       // Create a new file upload handler 
       ServletFileUpload upload = new ServletFileUpload(factory); 
       try 
       { 
        // Parse the request 
        List items = upload.parseRequest(request); 
        Iterator iterator = items.iterator(); 
        while (iterator.hasNext()) 
        { 
         FileItem item = (FileItem) iterator.next(); 
         if (!item.isFormField()) 
         { 
          String fileName = item.getName();  
          String root = getServletContext().getRealPath("/"); 
          File path = new File(root + "/uploads"); 
          if (!path.exists()) 
          { 
           boolean status = path.mkdirs(); 
          } 
          File uploadedFile = new File(path + "/" + fileName); 
          System.out.println(uploadedFile.getAbsolutePath()); 
         if(fileName!="") 
          item.write(uploadedFile); 
         else 
         out.println("file not found"); 
         out.println("<h1>File Uploaded Successfully....:-)</h1>"); 
        } 
        else 
        { 
         String abc = item.getString(); 
         out.println("<br><br><h1>"+abc+"</h1><br><br>"); 
        } 
       } 
      } 
      catch (FileUploadException e) 
      { 
      out.println(e); 
      } 
      catch (Exception e) 
      { 
      out.println(e); 
      } 
     } 
     else 
     { 
      out.println("Not Multipart"); 
     } 
     } 
} 

.jsp文件:

<form method="post" action="UploadServlet" enctype="multipart/form-data"> 
Select file to upload: 
    <p><input type="file" name="dataFile" id="fileChooser" />&nbsp; 
    <input type="submit" value="Upload" multiple="multiple" /></p> 
</form> 

我正在尋找一種方式來上傳多個文件,而不是僅僅一個,並顯示在一個列表。

+0

什麼特別的是,你正面臨着與上面的代碼的問題屬性? – Amadan

+0

這允許我上傳單個文件,我正在尋找如何上傳多個文件的方向。 – user3029610

+0

http://stackoverflow.com/questions/19510656/how-to-upload-files-on-server-folder-using-jsp/19842732#19842732 –

回答

1

哦......乍一看,看起來像一個簡單的錯誤。 multiple是文件輸入的屬性,而不是提交按鈕。

+0

我改變了它,但沒有骰子。 – user3029610

+0

看來我重複了同樣的評論,但「沒有骰子」絕對沒有提供有用的反饋意見,關於具體哪裏出了問題,以及如何幫助你。 「按照建議,我改變了這樣的代碼:,但我仍然無法上傳多個文件」很有用。或者「...但現在,即使我上傳了更多文件,服務器端組件也只能找到其中的一個。」是有用的。「無骰子」與緊急情況下的「文檔,有趣的東西」有關。 – Amadan

+0

@ user3029610在您的問題的代碼中進行更改。 –

-1

要上傳單個文件,您應該使用屬性type =「file」的單個標籤。要允許多個文件上傳,請爲名稱屬性包含具有不同值的多個輸入標記。瀏覽器將瀏覽按鈕與其中的每一個相關聯。

也就是說,可以使用下面一行多次:

<input type="file" name="dataFile" id="fileChooser" /><br><br> 

Refer this link for details

我希望這有助於。

1

我已經使用jsp/servlet上傳了多個文件。 以下是我使用的代碼。

<form action="UploadFileServlet" method="post"> 
<input type="text" name="description" /> 
<input type="file" name="file" /> 
<input type="submit" /> 
</form> 

另一方面服務器端。使用下面的代碼。

package com.abc..servlet; 

import java.io.File; 
--------- 
-------- 


/** 
* Servlet implementation class UploadFileServlet 
*/ 
public class UploadFileServlet extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    public UploadFileServlet() { 
     super(); 
     // TODO Auto-generated constructor stub 
    } 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     // TODO Auto-generated method stub 
     response.sendRedirect("../jsp/ErrorPage.jsp"); 
    } 

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     // TODO Auto-generated method stub 

      PrintWriter out = response.getWriter(); 
      HttpSession httpSession = request.getSession(); 
      String filePathUpload = (String) httpSession.getAttribute("path")!=null ? httpSession.getAttribute("path").toString() : "" ; 

      String path1 = filePathUpload; 
      String filename = null; 
      File path = null; 
      FileItem item=null; 


      boolean isMultipart = ServletFileUpload.isMultipartContent(request); 

      if (isMultipart) { 
       FileItemFactory factory = new DiskFileItemFactory(); 
       ServletFileUpload upload = new ServletFileUpload(factory); 
       String FieldName = ""; 
       try { 
        List items = upload.parseRequest(request); 
        Iterator iterator = items.iterator(); 
        while (iterator.hasNext()) { 
         item = (FileItem) iterator.next(); 

          if (fieldname.equals("description")) { 
           description = item.getString(); 
          } 
         } 
         if (!item.isFormField()) { 
          filename = item.getName(); 
          path = new File(path1 + File.separator); 
          if (!path.exists()) { 
           boolean status = path.mkdirs(); 
          } 
          /* START OF CODE FRO PRIVILEDGE*/ 

          File uploadedFile = new File(path + Filename); // for copy file 
          item.write(uploadedFile); 
          } 
         } else { 
          f1 = item.getName(); 
         } 

        } // END OF WHILE 
        response.sendRedirect("welcome.jsp"); 
       } catch (FileUploadException e) { 
        e.printStackTrace(); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
    } 

} 
3

檢查 FileUPload Using Servlet 3.0

它上傳單個文件使用Servlet3.0正如你所看到的代碼現在大大簡化工作代碼。並沒有依賴Apache的圖書館。

只是使用下面index.html

<html> 
<head></head> 
<body> 
<form action="FileUploadServlet" method="post" enctype="multipart/form-data"> 
Select File to Upload:<input type="file" name="fileName" multiple="multiple"/> 
<br> 
<input type="submit" value="Upload"/> 
</form> 
</body> 
</html> 

只有改變這裏是我用過multiple="multiple"輸入型文件

+0

在Windows彈出窗口中不允許選擇多個文件 - 即使按下控制按鈕或鼠標選擇。 –