|
Мультизагрузка картинок
Доброго дня всем
Есть форма и инпут типа 'file' с атрибутом 'multiple'. Также имется предпросмотр выбранных картинок. Когда юзер выбирает сразу несколько изображений, то они все попадают в массив $_FILES и все работает нормально. Но если юзер выбирает одну картинку, закрывает окно выбора, потом следующую и т.д., то в массив $_FILES попадает последняя. При этом в окне предпросмотра все они показываются нормально. Такой вопрос - как их объединить, чтобы все работало так, как будто выбираются сразу несколько файлов? Код предпросмотра window.onload = function(){ //Check File API support if(window.File && window.FileList && window.FileReader){ var filesInput = document.getElementById("files"); filesInput.addEventListener("change", function(event){ var files = event.target.files; //FileList object var output = document.getElementById("result"); for(var i = 0; i< files.length; i++){ var file = files[i]; //Only pics if(!file.type.match('image')) continue; var picReader = new FileReader(); picReader.addEventListener("load",function(event){ var picFile = event.target; var div = document.createElement("div"); div.className = 'img_preview'; div.innerHTML = "<img class='thumbnail' src='" + picFile.result + "'" + "title='" + picFile.name + "'/>"; output.insertBefore(div,null); }); //Read the image picReader.readAsDataURL(file); } }); } else { console.log("Your browser does not support File API"); } } Спасибо |
Нужно удалять все превью, когда пользователь просто закрывает окно выбора файла, т.к. все выбранные до этого файлы "сбрасываются".
После строки 11: if(!files.length) output.innerHTML=''; |
Цитата:
|
Nexus,
похоже вопрос в том как отправить ВСЕ картинки из output на сервер? |
Цитата:
|
<input type="file" multiple id="files" accept="image/*"/> <div id="result"></div> <style>.thumbnail{max-width:100px;}</style> <script> (function(){ if(!window.File || !window.FileList || !window.FileReader) return console.log("Your browser does not support File API"); document.getElementById("files").addEventListener("change", function(event) { var files = event.target.files, output = document.getElementById("result"); output.innerHTML = ''; for(var i = 0; i < files.length; i++) { var file = files[i]; if(!file.type.match('image')) continue; var picReader = new FileReader(); picReader.addEventListener("load", function(event) { var picFile = event.target; var div = document.createElement("div"); div.className = 'img_preview'; div.innerHTML = "<img class='thumbnail' src='" + picFile.result + "'" + "title='" + picFile.name + "'/>"; output.insertBefore(div, null); }); picReader.readAsDataURL(file); } }); })(); </script> Сейчас скрипт работает правильно, он всегда отрисовывает только действительно выбранные изображения, которые и будут отправлены на сервер. Чтобы реализовать возможность последовательного/поочередного выбора изображений для загрузки нужно либо сохранять выбранные пользователем изображения в переменной и отправлять их на сервер скриптом, либо каждый раз клонировать поле выбора файла (в этом случае обработчик лучше делегировать ближайшему родителю). |
рони, вероятно вы правы.
|
Цитата:
|
LingVist,
копайте в сторону FormData |
Цитата:
|
Часовой пояс GMT +3, время: 02:39. |
|