2013-02-12 3 views
13

는 현재 내가 같은 패턴을 사용하는 파일의 일련의 처음 3 개 문자를 읽을 다음이 방법 반면,html5 fileReader - 파일의 처음 N 문자 만 읽는 방법?

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); 
} 

의 문제점은 내가 파일의 처음 3 개 문자에만 관심이 있다는 것입니다을 많은 파일과 메모리를 낭비합니다. 첫 번째 문자를 빠르게 들여다 봄으로써 파일을 빠르게 반복 할 수 있습니까?

편집 : slice()가 대답이었습니다. 감사합니다. sshen. 방법은 다음과 같습니다.

답변

9

.slice 메서드를 사용할 수 있습니다. 더 많은 것을 읽을 수 있습니다 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

여기 코드가 세부 사항이 없다고 생각합니다. (어디에서'file' var?를 얻을 수 있습니까?)하지만 제공된 링크는 완벽합니다. +1 –

+0

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

+0

@Noodle,이 방법은 성능면에서 좋은 방법입니까? – Pacerier

0

어떤 식 으로든 FileList 인터페이스의 내용을 계속 살펴 봐야합니다. 전체 파일을 읽는 이유는 모든 파일에 onload를 연결하고 readAsText()를 호출 할 때입니다. 전체 파일을 읽지 않으려면 파일 목록으로 다시 호출되는 이벤트 핸들러를 등록하십시오. 파일이로드되고 통과합니다. 폼 제출이나 이벤트 객체의 일부로 파일 목록을 가져올 것으로 예상되는 무언가를 먼저 읽지 않고 첨부 한 this과 같은 것입니다.

<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

더 명확해야합니다. 파일 이름이 아닌 실제 파일 내용의 처음 세 문자를 찾고 있습니다. –

관련 문제