2016-07-23 30 views
0

Ich versuche, eine Datei-Upload-Funktionalität mit Webkitverzeichnis mit Java-Backend zu implementieren.Hochladen von Dateien in Ordner/Unterverzeichnisse mit WebkitDirectory und Java Servlet

Schritt1. Entwerfen Sie ein HTML-Formular mit webkitdirectory

<form action="DataUpload" method="post" enctype="multipart/form-data"> 
<input type="text" name="dbName" value="Database Name Here" id="dbName"/> 
    <input type="file" id="ctrl" webkitdirectory directory multiple/> 
    <input type="submit" /> 
</form> 

Schritt 2. Passing Informationen von form zu Servlet

public class DataUpload extends HttpServlet { 
    protected void doPost(HttpServletRequest request, HttpServletResponse response){ 

    ServletFileUpload upload = new ServletFileUpload(); 
    FileItemIterator fileIterator; 
    try { 
     fileIterator = upload.getItemIterator(request); 
     InputStream inputStream = null; 
     BufferedReader br = null; 
     System.out.println("CheckPoint 1"); 
     while(fileIterator.hasNext()) { 
      System.out.println("CheckPoint 2"); 
      FileItemStream item = fileIterator.next(); 
      String inputFileName = FilenameUtils.getName(item.getName()); 
      inputStream = item.openStream(); 

      inputFileName = inputFileName.split("\\.")[0]; 
      List<String[]> list = new ArrayList<String[]>();     
      // Getting File 
      br = new BufferedReader(new InputStreamReader(inputStream)); // Getting the object to read file 
      String line; 
      while((line = br.readLine())!= null){// While condition ends then end of file is reached. 
       list.add(line.split(",")); 
      } 
      // Checking if File is Empty 
      if (list.size() == 0){ 
       System.err.println("File Empty"); 
      }else{ 
       // TODO : Parameter Parser. 
       // DO JOB HERE 
      }   
     } 
    } catch (FileUploadException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

Mein Code, geben keine Programmierfehler, aber es geht nicht durch die CheckPoint 2, dh Es geht nicht in die while Schleife. Ich habe versucht, in verschiedene Posten suchen, wie zum Beispiel:

Keep Directory Structure When Uploading
How to upload files to server using JSP/Servlet? - Während diese Frage in Frage maximale Ähnlichkeit mit Problem zeigt, arbeitet This Frage mehrere Dateien in einem Ordner für die Auswahl, wo das Problem hier Frage ist hochladen Dateien in verschiedenen Unterverzeichnissen in einem Ordner.

Ich frage mich, ob dies nur mit java servlets ohne javascript möglich war. Ich konnte mehrere Dateien in einem einzigen Ordner hochladen. Aber, Code scheint nicht zu funktionieren, wenn ich einen Ordner als Eingabe auswähle, stattdessen funktioniert es, wenn ich eine bestimmte Datei oder eine Teilmenge von Dateien auswähle.

Antwort

0

HTML Datei Formular

<form onsubmit="readFiles()"> 
    <input type="file" name="files" webkitdirectory directory multiple id="files"> 
    <input type="submit"> 
</form> 

JavaScript-Funktion

function readFiles(){ 
    var files = document.getElementById("files").files; 
    for (var file = 0 ; file < files.length; file++) { 
     var reader = new FileReader(); 
     reader.onload = function(e){ 
      var object = new Object(); 
      object.content = e.target.content; 
      var json_upload = "jsonObject=" + JSON.stringify(object); 
      var xmlhttp = new XMLHttpRequest(); // new HttpRequest instance 
      xmlhttp.open("POST", "http://localhost:8080/readFileServlet"); 
      xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
      xmlhttp.send(json_upload); 
     } 
     reader.readAsBinaryString(files); 
    } 
} 

Java Funktion:

JSONObject jObj = new JSONObject(request.getParameter("jsonObject")); 
-1

in einer post-Methode versuchen

@Autowired ServletContext c machen; oder Objekt davon in Servlets nehmen

 byte[] bytes = file.getBytes(); 

     String UPLOAD_FOLDEdR=c.getRealPath("/images");  
     Path path = Paths.get(UPLOAD_FOLDEdR +"/"+ file.getOriginalFilename()); 
     Files.write(path, bytes);