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ğmenint 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!
oh bilmediğini Cevabınız için teşekkürler! Blog gerçekten kolayca takip edebilirim. Tekrar teşekkürler :) – Bernice
@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. –
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