files = {}; // для хранения файлов
var theInputFile = $('input[type="file"]'); // инпут с типом файл и атрибутом multiple
var dropZone = $('.dropZone');
ondragover,ondragleave // пропустим
//когда файл(-ы) перетащили и бросили
dropZone[0].ondrop = function(event){
event.preventDefault(); //отмена стандартных поведений браузера
event.stopPropagation(); //отмена стандартных поведений браузера
dropZone.removeClass('hovered'); // удаляем
dropZone.addClass('droped'); // и добавляем нужные классы
var dt = event.dataTransfer; // получаем
var dfiles = dt.files; // переносимые файлы
var dcount = dfiles.length; // получаем кол-во переносимых файлов
if(dcount<=fileLimit){ // если меньше или равно 3 (кол-во)
$('.totalPhotos span').text(dcount); // показываем кол-во юзеру
files = {}; // очищаем хранилище с файлами
theInputFile.val(''); //очищаем инпут file
$('.combineLoaded').empty(); // очищаем div, где будут отображаться превью файлов
theInputFile.files = dfiles; // попытка добавить инпут file все переносимые файлы (не работает)
var isSomeFileTooBig = Object.values(theInputFile.files).some(function(file){ //найти во всех файлах
return file.size > maxFileSize; //файл, превыщающий 4 мб
});
if(isSomeFileTooBig){ // если нашелся такой
$('.totalPhotos span').css('color', '#ff0000').text('0'); // то
files = {}; // очищаем хранилище файлов
theInputFile.val(''); // и инпут file
$('.combineLoaded').empty(); // и div для вывода превью файлов
return false; // далее делаем ничего
}
// а если нет файла больше чем 4 мб
else{
$.each(theInputFile.files, function(i, file){ // то перебираем каждый файл
var reader = new FileReader(); // читаем файл
reader.onload = function(e){
$('.combineLoaded').append('<div class="readUploadedFile ovh boxs posr"><div class="loadedImageName"><div class="fileName posr boxs ovh" title="'+ file['name'] +'">'+ file['name'] +'</div></div><img src="'+e.target.result+'" alt="'+ file['name'] +'" title="'+ file['name'] +'"></div>');
};
reader.readAsDataURL(file); // вывели превью файла с именем
});
}
}
else{
$('.totalPhotos span').css('color', '#ff0000').text('0'); // а если перетащили более 3 файлов то
files = {}; // очищаем хранилище
theInputFile.val(''); // очищаем инпут file
$('.combineLoaded').empty(); // очищаем div с превью
return false; // дальше делаем ничего
}
};
结果是什么?拖动文件时,会显示它们的预览和名称,一切都会好起来的,但输入文件不会将传输的文件添加到自身。很遗憾。
输入文件没有添加便携式拖放文件的事实,我用php检查过
if(empty($_FILES['file']['name'])){
echo json_encode(['error' => 'Не выбраны изображения для загрузки'], JSON_UNESCAPED_UNICODE);
exit;
}
同时,如果你通过点击原生的“选择文件”按钮来选择文件,一切正常。但这是一个拖放式的伏击。有没有办法解决这个问题?
决定如下:我在互联网上读了很多,据说这是不可能的,这是禁止的。但是,他有自己的“做羊做人”的品质,他还是把问题解决了,很简单。
烤面包机 答案:
在我的情况下
var theInputFile,它是一个 jquery 集合,而不是一个特定的元素。这就是为什么:你需要更换线路
在
现在一切都是正确的,原因很清楚,也可以通过更改线路来做同样的事情
在
祝你们好运