2013-02-12 44 views
13

Hiện nay tôi sử dụng một mô hình như sau để đọc 3 ký tự đầu tiên của một loạt các tập tin:html5 fileReader - làm thế nào để chỉ đọc N ký tự đầu tiên của một tệp?

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

Vấn đề là tôi chỉ quan tâm đến 3 ký tự đầu tiên của tập tin, trong khi đó phương pháp này đọc toàn bộ tập tin, lãng phí rất nhiều bộ nhớ và thời gian. Làm cách nào để tôi có thể lặp lại nhanh chóng các tệp, chỉ cần xem nhanh các ký tự đầu tiên?

Chỉnh sửa: slice() là câu trả lời, cảm ơn sshen. Đây là cách tôi đã làm điều đó:

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

Trả lời

9

Bạn có thể sử dụng phương thức .slice. Bạn có thể đọc thêm 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

Tôi nghĩ rằng mã ở đây thiếu chi tiết (nơi bạn nhận được 'file' var?) Nhưng liên kết được cung cấp là hoàn hảo. +1 –

+0

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

+0

@Noodle, Điều này có được thực hiện theo cách thực hiện không? – Pacerier

0

Dù bằng cách nào bạn vẫn phải đi qua danh sách tệp, nội dung của giao diện FileList. Lý do bạn đọc trong toàn bộ tệp là khi bạn đính kèm tải lên vào mỗi tệp và gọi readAsText() Nếu bạn không muốn đọc toàn bộ tệp, chỉ cần đăng ký trình xử lý sự kiện được gọi lại với filelist trước các tệp được tải và đi qua nó. Một cái gì đó như this, nơi bạn đính kèm vào một biểu mẫu gửi hoặc một cái gì đó mà dự kiến ​​sẽ nhận được danh sách tập tin như là một phần của đối tượng sự kiện của nó, mà không đọc từng cái đầu tiên.

<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

Tôi phải rõ ràng hơn-- Tôi đang tìm ba ký tự đầu tiên của nội dung tệp thực, chứ không phải tên tệp. –

Các vấn đề liên quan