この JS コードでjQuery プラグインjQuery-File-Uploadを使用しています。
$('#file_upload_single').fileupload({
dataType: 'json',
acceptFileTypes: /(\.|\/)(gif|jpe?g|tif|png)$/i,
maxFileSize: 20000000, // 20MB
done: function (e, data) {
$.each(data.result, function (index, file) {
var msg = file.name + " upload terminado.";
$('<p/>').text(msg).appendTo($('#progressLog'));
});
$('#progressBar .bar').css('width','0%');
},
progressall: function (e, data) {
var progress = parseInt(data.loaded / data.total * 100, 10);
$('#progressBar .bar').css('width',progress + '%');
}
});
$('#file_upload_single').bind('fileuploadsubmit', function (e, data) {
var inputs = data.context.find(':input');
if (inputs.filter('[required][value=""]').first().focus().length) {
alert("Por preencher");
return false;
}
data.formData = inputs.serializeArray();
});
そしてHTMLで:
<form id="file_upload_single" action="UploadServlet" method="POST" enctype="multipart/form-data">
<input id="file_2" type="file" name="file_2"
style="background: gainsboro;" size="70" />
<p>
<label for="file_2_title">Título:</label>
<input id="file_2_title" name="file_2_title" type="text" required title="Título" size="30"/>
</p>
<p>
<label for="file_2_desc">Descritivo</label>
<input id="file_2_desc" name="file_2_desc" type="text" required title="Descritivo" size="60"/>
</p>
</form>
<button id="formSubmit_single" class="myButton ui-widget ui-state-default ui-corner-all bt_register"
type="button" name="formSubmit_single" value="Upload" title="Máx. 20MB cada, do tipo: gif, jpeg, jpg, tif ou png">Imagem única, com descritivo</button>
bind メソッドがコメント化されている場合、ファイルは正しくアップロードされますが、acceptFileTypes と maxFileSize のいずれのフィルターも実行されません。サーブレットでは、「String file_2_title = request.getParameter("file_2_title");」null を返します。
bind メソッドが (上記のように) コメントされていない場合、何も実行されません! Firebug ショー:
TypeError: data.context is undefined
var inputs = data.context.find(':input');
bind メソッドはSubmit Form Dataのようなものです。どうしたの?