2016-01-09 2 views
-1

Я пробовал почти все, что доступно в Интернете, но ничего не работает.Загрузите несколько файлов с помощью AJAX и сервлета

У меня есть код filerader HTML5, который доставит мне все файлы, прочитанные из каталога на стороне клиента. var f = $('#fileUpload')[0].files;. Следующее, что я хочу загрузить все эти файлы с помощью запроса AJAX на метод POST-сервлета JAVA. за что я пытался ниже code-

var data = new FormData(); 
     $.each(f, function(key, value) 
     { 
      data.append(key, value); 
     }); 
postFilesData(data); 
//some code.. 
    function postFilesData(data) 
    { 
    $.ajax({ 
     url: 'serv2', 
     type: 'POST', 
     //enctype: 'multipart/form-data', 
     data: data, 
     cache: false, 
     processData: false, 
     mimetyep: 'multipart/form-data', 
     contentType: 'multipart/form-data', 
     success: function(data) 
     { 
      //success 
     }, 
     error: function(textStatus) 
     { 
      console.log('ERRORS: ' + textStatus); 
     } 
     }); 
    } 

сервлет кода doPOst

ме-
System.out.println("Hi what request:"+ServletFileUpload.isMultipartContent(request)); 
     System.out.println("hi bro"); 
    // awsUpload.uploadData(foldername); 
     System.out.println("outside aws"); 

     DiskFileItemFactory factory = new DiskFileItemFactory(); 


     ServletFileUpload upload = new ServletFileUpload(factory); 

     String uuidValue = ""; 
     FileItem itemFile = null; 

     try { 
      // parses the request's content to extract file data 
      List formItems = upload.parseRequest(request); 
      Iterator iter = formItems.iterator(); 

      // iterates over form's fields to get UUID Value 
      while (iter.hasNext()) { 
       FileItem item = (FileItem) iter.next(); 
       if (item.isFormField()) { 

       } 
       // processes only fields that are not form fields 
       if (!item.isFormField()) { 
        itemFile = item; 
       } 
      } 
     } 
      catch (Exception e) { 
       // TODO: handle exception 
      } 

     //System.out.println(path); 
    // response.sendRedirect(path+"/user"+"/home.html"); 
    // System.out.println("done"); 

     if(itemFile==null) 
     { 
      System.out.println("File Empty Found"); 
     } 
     System.out.println("The File Name is"+itemFile.getName()); 
} 

HTML код:

<form method="POST" enctype="multipart/form-data" > 

     <input type="file" class="input-file" name="file[]" id="fileUpload" 
     onchange="fileChanged();" multiple mozdirectory="" 
     webkitdirectory="" directory=""/> <br/> 

печатает "пустой файл Found" и падает на ниже линии с NullPointerException , Я понимаю, что он не получает никаких данных. Не могли бы вы указать фрагмент кода, который неверен или отсутствует код, который необходимо добавить.

+0

Существует много возможностей, которые можно было бы отлаживать и прибивать гвоздями, но вы не сказали ни слова/подробностей об этом. Поработайте над этим первым и уменьшите вопрос к этому. Например, это многопользовательский контент? Включен ли цикл while? Неужели нет исключения? (ваш код имеет пустой блок catch, который игнорирует любое исключение и продолжает код, как будто ничего необычного не произошло). – BalusC

+0

Почему голос? – tanmayub

ответ

1

Благодарим за отзыв, ребята .. !! Чтобы ответить на вопросы BalusC, да, это многостраничная загрузка. Он входит в цикл while, но данные не были переданы из вызова ajax, а код просто сломался в строке System.out.println("The File Name is"+itemFile.getName());, так как не было элемента для получения FileName. Только исключения, которые я получил, были на консоли «NullPointerException» и на UI-консоли (при отладке в JS) «Внутренняя ошибка сервера 500» Я смог исправить код и смог передать данные через вызов AJAX на Servlet. Ниже приведен код. в значительной степени изменились/перестроенный код AJAX вызова и сервлет code--

AJAX request--

var fd = new FormData();  
    //fd.append('file', $('#fileUpload')[0].files);//.files[0]); 

    $.each($('#fileUpload')[0].files, function(k, value) 
      { 
       fd.append(k, value); 
      }); 

    $.ajax({ 
     url: 'serv2', 
     data: fd, 
     processData: false, 
     contentType: false, 
     type: 'POST', 
     success: function(data){ 
     alert(data); 
     } 
    }); 

Servlet кодовую doPost method--

if (!ServletFileUpload.isMultipartContent(request)) { 
      PrintWriter writer = response.getWriter(); 
      writer.println("Request does not contain upload data"); 
      writer.flush(); 
      return; 
     } 
     // configures upload settings 
     DiskFileItemFactory factory = new DiskFileItemFactory(); 
     factory.setSizeThreshold(THRESHOLD_SIZE); 

     ServletFileUpload upload = new ServletFileUpload(factory); 
     //upload.setFileSizeMax(MAX_FILE_SIZE); 
     //upload.setSizeMax(MAX_REQUEST_SIZE); 

     String uuidValue = ""; 
     FileItem itemFile = null; 

     try { 
      // parses the request's content to extract file data 
      List formItems = upload.parseRequest(request); 
      Iterator iter = formItems.iterator(); 

      // iterates over form's fields to get UUID Value 
      while (iter.hasNext()) { 
       FileItem item = (FileItem) iter.next(); 
       if (item.isFormField()) { 
        if (item.getFieldName().equalsIgnoreCase(UUID_STRING)) { 
         uuidValue = item.getString(); 
        } 
       } 
       // processes only fields that are not form fields 
       if (!item.isFormField()) { 
        itemFile = item; 
       } 
      } 
      System.out.println("no of items: " + formItems.size()); 
      System.out.println("FILE NAME IS : "+itemFile.getName()); 
    } 
} 

Я был в состоянии печатать не из файлы файлов, переданные из пользовательского интерфейса, которые были правильными. Спасибо за ваше время, ребята .. !! :)

Смежные вопросы