blueimp / jQuery File upload-как получить сообщение об ошибке, если тип файла не был принят?
Я хочу использовать загрузку файла BlueImp/Jquery, чтобы иметь возможность загружать некоторые изображения на веб-сервер. У меня есть этот код JS, который я создал, прочитав много источников
$('#file_upload').fileupload('option', {
dataType: 'json',
url: '/Upload/UploadFiles',
maxFileSize: 5000000,
acceptFileTypes: /(.|/)(gif|jpe?g|png)$/i,
process: [
{
action: 'load',
fileTypes: /^image/(gif|jpeg|png)$/,
maxFileSize: 20000000 // 20MB
},
{
action: 'resize',
maxWidth: 1440,
maxHeight: 900
},
{
action: 'save'
}
],
progressall: function (e, data) {
$(this).find('.progressbar').progressbar({ value: parseInt(data.loaded / data.total * 100, 10) });
},
done: function (e, data) {
$('#show_image').append('<img src="' + data.result[0].ThumbURL + '" />');
$('#imgID').val($('#imgID').val() + data.result[0].Id + ',');
$(this).find('.progressbar').progressbar({ value: 100 });
},
error: function (e, data) {
var a = 1;
}
});
});
он работает, потому что он не загружает файл, который не является изображением, но я хотел бы иметь возможность получать сообщения об ошибках (если они существуют), чтобы показать пользователю.
на демо у них есть некоторый код (jquery.fileupload с-уй.js и jquery.fileupload с-ФП.js), которые создают "волшебно" HTML с ошибкой внутри (я все еще пытаюсь понять это).
Я действительно не понимаю, должен ли я использовать эти плагины тоже и как-то настроить генерируемый HTML или если проще получить информацию вручную и заполнить ее.
Я довольно новичок в JS и Jquery, поэтому, возможно, я что-то упускаю.
Как настроить генерируемый HTML или как получить сообщение об ошибке?
спасибо, Оскар!--2-->
9 ответов
для этого вы можете использовать добавленный обратный вызов файла для проверки файлов, например, используйте "return false", чтобы избежать добавления этого файла;
$('#yourfileuploader').fileupload({
add: function (e, data) {
var fileType = data.files[0].name.split('.').pop(), allowdtypes = 'jpeg,jpg,png,gif';
if (allowdtypes.indexOf(fileType) < 0) {
alert('Invalid file type, aborted');
return false;
}
}
});
или вы можете зарегистрировать fileuploadadded обратный вызов, как это,
$('#yourfileuploader').fileupload().bind('fileuploadadded', function (e, data) {
var fileType = data.files[0].name.split('.').pop(), allowdtypes = 'jpeg,jpg,png,gif';
if (allowdtypes.indexOf(fileType) < 0) {
alert('Invalid file type, aborted');
return false;
}
});
также вы можете получить доступ к параметрам fileupload acceptFileTypes, используя; е.originalEvent.данные.fileupload с.опции.acceptFileTypes
Вы можете найти более подробную информацию здесь;
Я знаю, что это старый нить, но если кто-то еще ищет, как получить сообщение об ошибке, вот способ сделать это:
$('#fileupload').bind('fileuploadprocessfail', function (e, data) {
alert(data.files[data.index].error);
});
Как упоминалось user2999209, правильный путь - с fileuploadprocessfail
обратный.
чтобы завершить его ответ, если вы хотите перевести сообщение об ошибке, вы должны передать следующий (недокументированный) вариант:
$('#my-uploader').fileupload({
// ... some options ...
messages : {
maxNumberOfFiles: 'AAA Maximum number of files exceeded',
acceptFileTypes: 'AAA File type not allowed',
maxFileSize: 'AAA File is too large',
minFileSize: 'AAA File is too small'
uploadedBytes : 'AAA Uploaded bytes exceed file size'
},
// ... some other options ...
})
.on("fileuploadprocessfail", function(e, data) {
var file = data.files[data.index];
alert(file.error);
});
попытка загрузить файл с неправильным типом файла приведет к отображению сообщения "тип файла AAA не разрешен".
использовать processfail
обратный звонок
$('#fileupload').fileupload({
maxFileSize: 5000000,
done: function (e, data) {
$.each(data.result.logo, function (index, file) {
$('<p/>').text(file.name).appendTo('#fileupload-files');
});
},
processfail: function (e, data) {
alert(data.files[data.index].name + "\n" + data.files[data.index].error);
}
});
Если вы используете PHP сервер, у меня есть более простое решение. Если нет, я думаю, это может помочь и вам.
вам не нужно использовать acceptFileTypes param в интерфейсе. Просто инициализируйте класс PHP UploadHandler с помощью следующих параметров:
array(
'accept_file_types' => '/\.(gif|jpe?g|png)$/i',
'upload_url' => 'uploads/', // both of upload_url, upload_dir equals to the upload destination
'upload_dir' => 'uploads/',
'max_file_size' => 1024*1024*2 // in byte
)
когда вы передаете нежелательный тип файла или размер файла, возврат ajax будет чем-то вроде
{name: "Dream Come True.mp3", size: 14949044, type: "audio/mp3", error: "File type not allowed"}
или
{name: "feng (3).jpg", size: 634031, type: "image/jpeg", error: "File is too big"}
порядок загрузки скриптов важен чтобы получить сообщение об ошибке появляется с процессом проверки по умолчанию,
этот заказ работает для меня:
- tmpl.минута.js
- С помощью jQuery.пользовательский интерфейс.штучка.Яш
- С помощью jQuery.для iframe-транспорта.js
- С помощью jQuery.fileupload с.js
- С помощью jQuery.fileupload с-уй.js
- С помощью jQuery.fileupload с-Процесс.js
- С помощью jQuery.fileupload с-проверить.js
было бы лучше проверить тип файла (это будет формат типа "image/jpeg"), чем расширение. В этом случае вы избегаете потенциальных проблем с учетом регистра и подобных неожиданных проблем
$('#yourfileuploader').fileupload().bind('fileuploadadded', function (e, data) {
var fileType = data.files[0].type;
if (type.indexOf('image') < 0) {
alert('Invalid file type, aborted');
return false;
}
});
Если вы новичок в понимании того, как работает javascript errorhandling, лучше всего прочитать по теме:try / catch (MDN)
однако ошибка на самом деле является методом в прототипе fileupload, поэтому теоретически эта функция будет выполняться при возникновении ошибки.
просто добавьте {ваш код} в errorHandler в методе.
...
error: function (e, data) {
var a = 1; // <--in your example, this does nothing.
alert(e); // <--or whatever you wish to do with the error
return a; // <--did you want to return true?
}
...
Если это предупреждение никогда не происходит, то ошибка не возникает. Следующий код, как правило, как вы поймать их. (он еще этого не делает?)
try {
...any code you want to exception handle with...
}
catch (e) {
alert(e);
}
ничего, что я нашел в этих ответах, не работало для меня, и, как ни странно, разработчики, написавшие демо для этого плагина, используют другой стиль, чем описанный в документации. В любом случае, это к делу не относится.
Я скопировал код, который они используют, чтобы заставить версию пользовательского интерфейса работать, и это, наконец, сделало трюк для меня. Они используют их .на методе и "processalways" для проверки ошибок вместо использования метода "error" или "fail".
view-source:http://blueimp.github.io/jQuery-File-Upload/basic-plus.html
вот исходный код.
Ура