Я использую Dropzone для загрузки файлов, которые я сохраняю с некоторыми метаданными в базе данных в серверной части. Когда пользователь пытается загрузить большую часть файлов, я хочу проверить, загрузил ли он уже файл с этим именем, и предупредить его с предупреждением о возможности продолжить до остановки.
Поэтому я отключил autoProcessQueue
. Я также слушаю событие addedfile
, получаю имя, выполняю ajax, чтобы проверить, существует ли оно в базе данных, и возвращает true или false, хорошо.
Допустим, пользователь пытается загрузить 40 файлов, которые все уже существуют, я не хочу 40 предупреждений о том, что этот файл уже существует, я хочу одно уведомление, печатающее все 40 имен файлов. Я искал addedfile
, но для нескольких файлов я не нашел решения.
Вот мой код на данный момент Вот где я застрял Как я могу знать, когда я проверял каждый файл ?
$(document).ready(function() {
@if(isset($checkRoute))
function filenameExists(name) {
$.ajax({
type: 'GET',
url: '{{ $checkRoute }}',
data: {
name: name
}
})
.done(function(res) {
// returns true or false
return res
})
.fail(function(err) {
console.log(err)
})
}
@endif
let existingFilenames = []
let fileCount = 0
$('#{{ $element_id }}').dropzone({
url: "{{ $upload }}", // Set the url for your upload script location
paramName: "documents", // The name that will be used to transfer the file
maxFiles: 100,
maxFilesize: 100, // MB
parallelUploads: 100,
timeout: 240000,
addRemoveLinks: true,
acceptedFiles: "application/msword, application/vnd.ms-excel, application/pdf, image/*, application/vnd.openxmlformats-officedocument.wordprocessingml.document, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, image/*",
uploadMultiple: true,
headers: {
'X-CSRF-TOKEN': "{{ csrf_token() }}"
},
init: function() {
@if(isset($checkRoute))
this.on('addedfile', function(file) {
console.log(this.getAcceptedFiles())
fileCount++
if (filenameExists(file.name)) {
console.log(file.name)
existingFilenames.push(file.name)
}
})
@endif
},
autoProcessQueue: false,
sendingmultiple: function (files) {
// Begin loading
KTApp.blockPage({
overlayColor: '#000000',
type: 'v2',
state: 'success',
message: '{{ __('documents_uploading') }}'
});
},
queuecomplete: function () {
// End loading
KTApp.unblockPage();
$.notify({
// options
message: '{{ __('documents_upload_success') }}'
}, {
// settings
type: 'success',
placement: {
from: "top",
align: "center"
},
animate: {
enter: 'animated fadeInDown',
exit: 'animated fadeOutUp'
},
});
window.location.replace("{{ $redirect }}");
}
});
});
Еще одна вещь, которая меня беспокоит, - как я буду обрабатывать очередь при нажатии кнопки в уведомлении.