$('#fileupload')
.fileupload({
acceptFileTypes: /(\.|\/)(jpg)$/i
})
.on('fileuploadadd', function (e, data) {
console.log(data.files.valid); //undefined
setTimeout(function () {
console.log(data.files.valid); //true or false
}, 500);
})
;
jsFiddle
プロパティのブール値を取得する方法data.files.valid
タイムアウトなし?
これがあなたがしたいことです:
$('#fileupload')
.fileupload({
acceptFileTypes: /(\.|\/)(jpg)$/i
})
.bind('fileuploadadded', function (e, data) {
console.log(data.files.valid);
});
コアjquery.fileupload.jsファイルはファイルを追加し、「fileuploadadd」イベントをトリガーしますが、これはbeforeファイルが検証される前です。
ファイルjquery.fileupload-ui.jsは、ファイルが追加された後に検証を実行し、完了したら別の「fileuploadadded」イベントをトリガーします。
イベントを変更すれば、準備は完了です。
この回答は有効で、2013年3月に投稿された時点で機能しています。このアップロードプラグインはそれ以降変更されているようです。つまり、新しい問題が発生したため、新しい質問を投稿するか、検索して確認してください誰かがすでに持っている場合)これを反対投票するのではなく!
プラグインの現在のバージョン(5.39.1)で検証を行う必要があり、これは私にとってはうまくいきます:
必ず jquery.fileupload-process.js
および jquery.fileupload-validate.js
この順序でafterjquery.fileupload.js
およびbefore初期化スクリプト。
初期化スクリプトで、検証オプションを追加し、fileuploadprocessalways
コールバックで検証を確認します。
$('.fileinput').fileupload({
// The regular expression for allowed file types, matches
// against either file type or file name:
acceptFileTypes: /(\.|\/)(gif|jpe?g|png)$/i,
// The maximum allowed file size in bytes:
maxFileSize: 10000000, // 10 MB
// The minimum allowed file size in bytes:
minFileSize: undefined, // No minimal file size
// The limit of files to be uploaded:
maxNumberOfFiles: 10
}).on('fileuploadprocessalways', function (e, data) {
var currentFile = data.files[data.index];
if (data.files.error && currentFile.error) {
// there was an error, do something about it
console.log(currentFile.error);
}
});
すべての検証はオプションです。不要なものを残さないでくださいundefined
。
これは私がやったことであり、新しいバージョンではうまくいきました。ファイルのタイプごとに1つの検証とそのサイズを作成しました。
$("#fileUploadArea").fileupload({
dataType: 'json',
url:'${upload}',
multiple:true,
autoSubmit:false,
maxNumberOfFiles: Number('${quantidadeMaximaArquivosUpload}'),
dynamicFormData: function()
{
var data ={
idEntidadeEmpresarial: $('#idEntidadeEmpresarial').val(),
idDominioFamilia: $('#idDominioFamilia').val(),
idSubgrupo: $('select[id^="subgrupo_').map(function(){return $(this).val();}).get(),
descricao: $('#descricao').val(),
validade: $('#validade').val()
}
return data;
},
headers: {
Accept: "application/json"
},
accept: 'application/json',
imageMaxWidth: 800,
imageMaxHeight: 800,
imageCrop: true ,
stop: function(){
$.unblockUI();
if($('#fechar').is(":checked")){
window.close();
}else{
$('select[id^="subgrupo_').each(function(){
$(this).val('');
$(this).trigger("chosen:updated");
})
$('#validade').val('');
$('#descricao').val('');
$('#sucesso').html('');
$('#sucesso').append('<p><spring:message code="upload.sucesso"/>');
$('#sucesso').show();
}
},
error: function(files,status,errMsg)
{
$('#erro').html('');
$('#erro').append('<p>'+errMsg+'</p>');
$('#erro').show();
},
acceptFileTypes : ${listaExtensaoPermitidas}
}).on('fileuploadprocessalways', function (e, data) {
var currentFile = data.files[data.index];
var tamanho = currentFile.size;
var extensao = currentFile.name.substring(currentFile.name.lastIndexOf(".") +1,currentFile.name.length);
if(hashExtensao.get(extensao.toUpperCase()) < tamanho){
alert("file type max size "+hashExtensao.get(extensao.toUpperCase());
data.abort();
}
});
Addメソッドを使用することで可能になると思います。
var fileUploadInit = function() {
$("#file-upload-form").fileupload({
dataType: "json",
url: url,
add: function (e, data){
if(validatefunction(data)){
data.submit();
} else {
return false;
}
},
progressall: function (e, data) {
var progress = parseInt(data.loaded / data.total * 100, 10);
$('#upload-progress').css('width',progress + '%');
},
done: function(e, data) {
debugger
},
processfail: function(e, data){
debugger
}
})
}
var validatefunction = function(data){
// Do validation here. Return true if everything is correct else return false
}
これは、プラグインの新しいバージョン(9.11.2)で実行したいことです。このファイルを含めます。
-jquery.ui.widget.js
-jquery.iframe-transport.js
-jquery.fileupload.js
-jquery.fileupload-process.js
-jquery.fileupload-validate.js
$('#fileupload')
.fileupload({
acceptFileTypes: /(\.|\/)(jpg)$/i
})
.on('fileuploadadd', function (e, data) {
console.log('validation object not available at this point. Do not do submit here');
})
.on('fileuploadprocessalways', function (e, data) {
console.log(data.files.error);//true if error
console.log(data.files[0].error);//error message
if(!data.files.error) data.submit(); //do submission here
});
まあ、@ jszbodyの答えは完璧な答えです。
ただし、ファイルが正しく追加されていないかどうかをユーザーが知りたいという同様の問題の解決策を探して誰かがここに来た場合の私のように。