2013-08-14 23 views
5

ile dosya oluşturma Bir giriş türü dosyası ve metin ile normal bir giriş türü ve request.getParameter("element_name") ile servletimden alınıyor ancak Chrome denetçisini kullandığım halde bir jquery ajax Gönderdiğim FormData nesnesi, dosyam ve metin değerimi içerir, servlet, bir nedenle null parametresini okuyor. Girdi türleri ve dosya NullPointerException

Bu

Ben formu geçerli:

<form id="upload-form" action="upload" enctype="multipart/form-data" method="post"> 
    <input id="attach-btn" type="file" name="uploadedFile" style="display:none"/> 
    <input id="tick-id-upload" type="hidden" name="ID" value="<%=ticket_id%>" />    
    <input id="submit-form" type="button" style="display:none"/> 
</form> 

Bu jquery ajax sonrası çağrı olduğu (TICKET_ID başka jsp başarıyla dönüyor):

// use to refresh section on submit of a form 
$(document).on('click', '#submit-form', function() 
{ 
    var form_data = null; 

    if (drop === false) 
    { 
     // form data object with ticket id and file 
     form_data = new FormData($('#upload-form')[0]); 
    } 
    else 
    { 
     // append dropped file and value of id seperately 
     form_data = new FormData(); 
      form_data.append('ID', $('#tick-id-upload').val()); 
     form_data.append('uploadedFile', dropped_files); 
    } 

    $.ajax(
    { 
     url: $('#upload-form').attr('action'), 
     type: 'POST', 
     async: true, 
     xhr: function() // custom XMLHttpRequest 
     { 
      myXhr = $.ajaxSettings.xhr(); 

      if (myXhr.upload) 
      { // check if upload property exists 
       myXhr.upload.addEventListener('progress', show_progress, false); // for handling the progress of the upload 
      } 
      return myXhr; 
     }, 
     dataType: 'html', // the data type to be returned 
     success: function(response, status, xhr) 
     { 
      $('#progressbar').hide(); 

      if (xhr.getResponseHeader('duplicate') === 'true') 
      { 
       // file is duplicate.. display dialog box 
      setTimeout(function() 
      { 
        $('#trigger-dialog').trigger('click'); 
      }, 10);  
      } 
      else 
      { 
       // replace attachments section by section in response 
        $('#attachments').html($(response).find('#attachments').html()); 
        execute_attach_datatable(); 
        switch_to_view(); 

        init_progress_bar(); 
        override_section_height(); 
       } 
      }, 
      error: function(xhr, status, error) 
      { 
       alert(xhr.responseText); 
      }, 
      data: form_data , // what data to pass 
      cache: false, 
      contentType: false, // type of data to be sent 
      processData: false 
     }); 
    }); 

Ve bu ne olduğunu benim servlet'dir benim doPost yönteminde yapın:

Chrome'da Ağ bölümünde görüldüğü gibi veri gönderiliyor rağmen
int ticket_id = Integer.parseInt(request.getParameter("ID")); 

Bu çizgi NullPointerException döndürüyor.

Lütfen giriş türü metnini göndermeden dosyayı karşıya yüklerken sorun yaşamadığımı unutmayın. Yani, tick-id-upload öğesi olmadan aynı forma sahip olduğumda ve aynı jquery ajax aramasını kullandığımda, dosya başarıyla yüklendi.

Neler olduğu hakkında bir fikrin var mı? Çok teşekkürler!

cevap

3

Sen multipart/form istek request.getParameter() kullanarak doğrudan params okuyamaz. Bunun yerine, getPart yöntemini kullanarak mulitpart isteğinin farklı bölümlerini okumalısınız. İşte size çok parçalı istek parça adımlayabilirsiniz nasıl:

for (Part part : request.getParts()) { 
} 

detaylı örneğin bu blogu takip edin: http://balusc.blogspot.in/2009/12/uploading-files-in-servlet-30.html

+0

oh bilmediğini Cevabınız için teşekkürler! Blog gerçekten kolayca takip edebilirim. Tekrar teşekkürler :) – Bernice

+0

@Bernice Hayır probs :-) Cevabımı faydalı buluyorsanız lütfen kabul edin. Cevabı kabul etmek, başkalarının aynı problemle karşı karşıya kalmasına yardımcı olur. –

+0

Bu çözümden ayrı olarak, Java'da FileItem sınıfını kullanabilir, isteği ayrıştırıp hem dosyayı hem de öğeleri alabilirsiniz :) Bunu diğer kullanıcılar için başka bir yanıt olarak eklemem gerekmiyor. – Bernice