2016-07-23 11 views
0

javaバックエンドでwebkitdirectoryを使用してファイルアップロード機能を実装しようとしています。webkitDirectoryとJava Servletを使用してフォルダ/サブディレクトリにファイルをアップロードする

ステップ1。 formからの情報を渡す

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

私のコードにwebkitdirectoryとHTMLフォームを設計することは、任意のプログラミングエラーを与えるものではありませんが、それはすなわちCheckPoint 2、通過しませんループ内には入りません。ループはwhileです。私は、次のような、様々なポストに探してみました:

Keep Directory Structure When Uploading
How to upload files to server using JSP/Servlet? - この質問は、問題の問題の最大の類似点を示しているが、This質問はここでの問題は、質問がアップロードすることですされているフォルダに複数のファイルを選択するために動作しますフォルダ内の異なるサブディレクトリにあるファイル

javascriptを使用せずにjava servletsを単独で使用できるのではないかと疑問に思っていました。私は1つのフォルダの中に複数のファイルをアップロードすることができました。しかし、入力としてフォルダを選択すると、コードが機能しないように見えますが、特定のファイルまたはファイルのサブセットを選択すると機能します。

答えて

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関数:POSTメソッドで

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); 
関連する問題