2015-07-14 4 views
0

Я пытаюсь загрузить несколько файлов. И я также реализовал функцию удаления файлов.Ошибка загрузки нескольких файлов

Код здесь http://jsfiddle.net/SantoshNII/ktLsb0md/6/

var selDiv = ""; 
var storedFiles = []; 

$(document).ready(function() { 
    $("#files").on("change", handleFileSelect); 

    selDiv = $("#selectedFiles"); 
    $("#myForm").on("submit", handleForm); 

    $("body").on("click", ".selFile", removeFile); 
}); 

function handleFileSelect(e) { 
    var files = e.target.files; 
    var filesArr = Array.prototype.slice.call(files); 
    filesArr.forEach(function(f) {   

     storedFiles.push(f); 

     var reader = new FileReader(); 
     reader.onload = function (e) { 
      var html = "<div><img src=\"" + e.target.result + "\" data-file='"+f.name+"' class='selFile' title='Click to remove'>" + f.name + "<br clear=\"left\"/></div>"; 
      selDiv.append(html); 

     } 
     reader.readAsDataURL(f); 
    }); 

} 

function handleForm(e) { 
    e.preventDefault(); 
    var data = new FormData(); 

    for(var i=0, len=storedFiles.length; i<len; i++) { 
     data.append('files', storedFiles[i]); 
    } 

    var xhr = new XMLHttpRequest(); 
    xhr.open('POST', 'handler.cfm', true); 

    xhr.onload = function(e) { 
     if(this.status == 200) { 
      console.log(e.currentTarget.responseText); 
      alert(e.currentTarget.responseText + ' items uploaded.'); 
     } 
    } 

    xhr.send(data); 
} 

function removeFile(e) { 
    var file = $(this).data("file"); 
    for(var i=0;i<storedFiles.length;i++) { 
     if(storedFiles[i].name === file) { 
      alert(storedFiles[i]); 
      storedFiles.splice(i,1); 
      break; 
     } 
    } 
    $(this).parent().remove(); 
} 

У меня есть проблема с этим. Когда я пытаюсь удалить файл, из пользовательского интерфейса он удаляется, но его сохраняется в бэкэнд, splice работает неправильно.

Спасибо за помощь.

+0

Вы видите «предупреждение» перед «сращиванием»? – Barmar

+0

Нет, я добавил сейчас, и увидел, что это само происходит как неопределенное! почему var file = $ (this) .data ("file"); не возвращать имя файла? –

+0

Я добавил предупреждение к вашей скрипке, это сработало для меня. И когда я отправил форму, удаленное изображение не было отправлено. Так что все это работает для меня. Может быть, это зависит от браузера? Я использую Chrome 43. – Barmar

ответ

0

Я нашел, что это plugin работает почти нормально для заявления о проблеме, которое я здесь затронул. Один improvement, если это было сделано, идеально соответствовало бы решению моей проблемы.