2013-02-12 19 views
13

Şu anda böyle bir kalıp kullanmak dosyaların bir dizinin ilk 3 karakterini okumak için aşağıdaki: Bu yöntemde ise,html5 fileReader - Bir dosyanın sadece ilk N harfini nasıl okunur?

var files = e.dataTransfer.files; 
for (var i = 0, f; f = files[i]; i++) { 
    var fr = new FileReader(); 
    fr.onload = function(e) { 
    var first_three_chars = e.target.result.substr(0,3); 
    } 
    fr.readAsText(f); 
} 

Sorun, dosyanın ilk 3 karakterden ilgileniyorum sadece olmasıdır tüm dosyayı okur, çok fazla bellek ve zaman harcar. İlk karakterlere hızlı bir şekilde göz atmak için dosyaları nasıl hızlı bir şekilde yineleyebilirim?

Düzeltme: slice() yanıt oldu, teşekkürler sshen. İşte nasıl yaptık:

var files = e.dataTransfer.files; 
for (var i = 0, f; f = files[i]; i++) { 
    var fr = new FileReader(); 
    fr.onloadend = function(e) { 
    if (e.target.readyState == FileReader.DONE) { 
     var first_three_chars = e.target.result; 
    } 
    }; 
    var blob = f.slice(0, 3); 
    fr.readAsText(blob); 
} 

cevap

9

.slice yöntemini kullanabilirsiniz. Okuyabiliyorsun daha here

var reader = new FileReader(); 

reader.onloadend = function(evt) 
{ 
    if (evt.target.readyState == FileReader.DONE) // DONE == 2 
    { 
     alert(evt.target.result); 
    } 
}; 

var blob = file.slice(start, stop + 1); 
reader.readAsBinaryString(blob); 
+1

Buradaki kodun ayrıntılardan yoksun olduğunu düşünüyorum (dosya türünü nereden alıyorsunuz?) Ama sağlanan bağlantı mükemmel. +1 –

+0

'var file = document.getElementById ('myFile') dosyaları [0];' –

+0

@Noodle, Yine de bu performans açısından mı yapılır? – Pacerier

0

Her iki şekilde de FileList arabiriminin içeriği olan dosyalar listesinden geçmeniz gerekir. Tüm dosyada okuduğunuz nedeni her dosyaya yük yüklediğinizde ve readAsText() işlevini çağırdığınızda, tüm dosyada okumak istemiyorsanız, dosyadan önce filelistle geri çağrılan bir olay işleyicisini kaydettirmeniz yeterlidir. dosyalar yüklenir ve içinden geçer. this gibi, form gönderimine eklediğiniz veya dosya nesnesini etkinlik nesnesinin bir parçası olarak almayı bekleyen her şeyi ilk önce okumadan bir şey gibi.

<input type="file" id="files" name="files[]" multiple /> 
<output id="list"></output> 

<script> 
    function handleFileSelect(evt) { 
    var files = evt.target.files; // FileList object 

    // files is a FileList of File objects. List some properties. 
    var output = []; 
    for (var i = 0, f; f = files[i]; i++) { 
     var fileName = f.name.substr(0,3); 
     output.push('<strong>', fileName, '</strong>'); 
    } 
    document.getElementById('list').innerHTML = '<ul>' + output.join('') + '</ul>'; 
    } 

    document.getElementById('files').addEventListener('change', handleFileSelect, false); 
</script> 
+0

Ben gerçek dosya içeriğine değil, dosya adı ilk üç karakterden arıyorum daha clear-- olması gerekirdi. –

İlgili konular