2016-07-23 6 views
0

Я пытаюсь реализовать функцию загрузки файлов с помощью webkitdirectory с помощью java-бэкэнд.Загрузить файлы в папку/подкаталоги с помощью webkitDirectory и Java Servlet

Step1. Дизайн HTML форму с 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> 

Шаг 2. Передача информации от form к 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(); 
    } 
} 

Мой код, не дает какой-либо ошибки программирования, но она не проходит через CheckPoint 2, т.е. он не входит в петлю while. Я пытался смотреть в различные должности, такие как:

Keep Directory Structure When Uploading
How to upload files to server using JSP/Servlet? - В то время как этот вопрос показывает максимальное сходство с проблемой в вопросе, This вопрос работает для выбора нескольких файлов в папке, где проблема здесь вопрос состоит загрузить файлы в разных подкаталогах внутри папки.

Мне было интересно, если это возможно, используя только java servlets без использования javascript. Мне удалось загрузить несколько файлов внутри одной папки. Но код, похоже, не работает, когда я выбираю папку как входную, вместо этого она работает, когда я выбираю конкретный файл или подмножество файлов.

ответ

0

Форма HTML файла

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

JavaScript Функция

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 Функция:

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

в методе пост попробовать

сделать @Autowired ServletContext c; или взять объект из него в сервлеты

 byte[] bytes = file.getBytes(); 

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