Я использую Dropzonejs, и то, что я хотел бы сделать, по существу просто. Но я не могу найти статей об этом.
Поэтому при отправке файла мы вызываем ошибку при неприятных файлах.exe и.php. Интерфейс dropzonejs показывает сообщение X и и об ошибке. Так что правильно. Проблема в том, что он по-прежнему попадает в событие успеха и загружается.
uploader.on("sending", function (file, xhr, data) {
var aDeny = [ // deny file some extensions by default
'application/x-msdownload',
'text/php'
];
if($.inArray(file.type, aDeny) !== -1) {
this.defaultOptions.error(file, 'File not allowed: ' + file.name);
return false;
}
});
Evil.exe по-прежнему появляется в этом событии успеха и загружается. В ответе есть только строка пути к файлу и file.status.
uploader.on('success', function (file, response) {
getData({'dostuff'});
return file.previewElement.classList.add("dz-success");
});
Итак, в моем "отправке" события, как я могу предотвратить появление файла в событии успеха?
ОБНОВИТЬ:
Спасибо! Это то, что мне было нужно в конце:
var aDeny = [ // deny file some extensions by default
'application/x-msdownload',
'text/php'
];
Dropzone.options.uploadWidget = {
// more config...
accept: function (file, done) {
if ($.inArray(file.type, aDeny) !== -1) {
done("This file is not accepted!");
}
else {
done();
}
}
}
В первую очередь я бы всегда проверял тип файла на стороне сервера, чтобы предотвратить возникновение каких-либо проблем.
Затем, чтобы фильтровать типы файлов с помощью Dropzone, вы можете использовать:
Реализация accept по умолчанию проверяет тип или расширение файла mime на этот список. Это список разделенных запятыми типов mime или расширений файлов.
Например: image/*, application/pdf,.psd
Если Dropzone является кликабельным, эта опция также будет использоваться как параметр accept на входе скрытого файла.
Образец:
var myDropzone = new Dropzone("div#myId", {
url: "/file/post",
acceptedFiles: 'application/x-msdownload,text/php'
});
Функция, которая получает файл и выполняемую функцию как параметры.
Если выполняемая функция вызывается без аргументов, файл будет "принят" и будет обработан. Если вы передадите сообщение об ошибке, файл будет отклонен, и появится сообщение об ошибке. Эта функция не будет вызываться, если файл слишком большой или не соответствует типу mime.
Образец:
Dropzone.options.myAwesomeDropzone = {
paramName: "file", // The name that will be used to transfer the file
maxFilesize: 2, // MB
accept: function(file, done) {
if (file.name == "justinbieber.jpg") {
done("This file is not accepted!");
}
else { done(); }
}
};