|
Мультизагрузка картинок
Доброго дня всем
Есть форма и инпут типа '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, время: 21:26. |
|