2013-09-02 20 views
5

VeriTransfer öğelerini webkitGetAsEntry alacağınız sürükle ve bırak alanı oluşturmaya çalışıyorum ve girişin bir dizin veya dosya olup olmadığını kontrol edin.Bir FileList oluştur ve bu dosyayı bir Dosya girişine kopyala

Daha sonra dosyaları bir FileList'e dönüştürmek ve bunu bir dosya girişine (gönderilmeden önce doğrulanacak ve onaylanacak) kopyalamak istiyorum.

JSFiddle

function handleDrop(event) { 
     event.preventDefault(); 
     event.dataTransfer.dropEffect = 'copy'; 
     var length = event.dataTransfer.items.length; 
     var elFileInput = document.getElementById('File'); 
     for (var i = 0; i < length; i++) { 
      var entry = event.dataTransfer.items[i].webkitGetAsEntry(); 
      if (entry.isFile) { 
       convertFilesToFileObjects(entry);   
      } 
      else if (entry.isDirectory) { 
       var dirReader = entry.createReader(); 
       dirReader.readEntries(function(entries) { 
        for (var j = 0; j < entries.length; j++) { 
         convertFileEntrysToFileObjects(entries[j]); 
        } 
       }); 
      } 
     } 
     function convertFileEntrysToFileObjects(fileEntry) {   
      var addFileToInput = function (file) { 
       console.log(file); 
       //elFileInput.files = event.dataTransfer.files; 
       //Need to make a FileList and populate it with Files. 
      };  
      if (fileEntry.isFile) { 
       fileEntry.file(function (addFileToInput, file) { 
        addFileToInput(file); 
       }.bind(this, addFileToInput)); 
      } 
     } 
    } 

ben, ben sığınak prototipler kullanarak ve nesneleri uzatarak bir FileList nesnesi yapmaya çalışıyorum en şaşırıp o salt okunur W3 FileList Interface

var HTMLInputElement içinde FileList bir dosya kopyalayamazsınız Henüz başımı JS miras ve prototipleri etrafında sardım.

FileList nesnesini oluşturmak ve dosyalarla doldurmak, sonra bunu InputElement öğesine kopyalamak bile mümkün mü?

Düzenlendi: Yanlış JSFiddle bağlantısı.

+0

İlgili: Bugünlerde, ama sadece gerçek 'FileList ile mümkün gözükmektedir http://stackoverflow.com/questions/8006715/drag-drop-files-into-standard-html-file-input 've bunları yapmak için görünmüyor olabilirsiniz ... – Rudie

cevap

-2

Neden bir dosyayı FileList'e kopyalamanız gerekiyor?

Bunun yerine FileReader'ı kullanın. Ama göndermeden önce bir dosyayı doğrulamanız iyi bir fikir değildir. Güvenlik için bunu sunucu tarafında yapmalısınız. Dosyayı daha önce doğrulayabilirsiniz, ancak alındığında dosyayı tekrar doğrulamanız gerekir.

https://developer.mozilla.org/en-US/docs/Web/API/FileReader?redirectlocale=en-US&redirectslug=DOM%2FFileReader

+1

MVC3'te Ek Açıklamalar kullanarak HtmlInputElement üzerinde hem istemci hem de sunucu tarafı doğrulama yapıyorum. Form, HttpPostedFileBase Sınıfı olarak yayınlanır ve Denetleyicide işlenir. Ben bunun yerine bir FileRead kullanmayı düşünüyorum ve XMLHttpRequest kullanarak dosyaları gönderin, ama eğer bunu işe alabilirsek mutlu olurdum. –