File API を用いてファイルを一括読み込みする例を下記に示します。読み込んだファイルの内容は開発ツールのコンソールに表示されます。
<div> <input type="file" id="file1"> <button id="btn1">OK</button> </div> <script> document.getElementById("btn1").addEventListener("click", function(e) { var files = document.getElementById("file1").files; for (var i = 0; i < files.length; i++) { var file = files[i]; var reader = new FileReader(); reader.onload = function(e) { console.log("------onload------"); console.log("state=" + e.target.readyState); console.log("length=" + e.target.result.length); console.log("data=" + e.target.result); } reader.onerror = function(e) { console.log("error=" + e.target.error.name); } reader.readAsText(file, "utf-8"); } }); </script>
slice() を用いることで、分割読み込みすることが可能となります。分割読み込みの際には、下記の様な関数を用意しておくと便利です。
function readBlobAsText(blob, size, callback) { var offset = 0; var reader = new FileReader(); reader.onload = function(e) { callback(e.target.readyState, e.target.result); if (offset < blob.size) { slice = blob.slice(offset, offset + size, blob.type); offset += size; reader.readAsText(slice, "utf-8"); } } reader.onerror = function(e) { console.log("error=" + e.target.error.name); } slice = blob.slice(offset, offset + size, blob.type); offset += size; reader.readAsText(slice, "utf-8"); }
上記を用いて、ファイルを 10バイトずつ分割読み込みする例を下記に示します。
<div> <input type="file" id="file2"> <button id="btn2">OK</button> </div> <script> document.getElementById("btn2").addEventListener("click", function(e) { var files = document.getElementById("file2").files; for (var i = 0; i < files.length; i++) { readBlobAsText(files[i], 10, function(state, data) { console.log("------onload------"); console.log("state=" + state); console.log("length=" + data.length); console.log("data=" + data); }); } }); </script>
fetch() と Blob を組み合わせることで、http://~ や https://~ で始まるリモートのリソースを分割読み込みすることが可能です。
<input type="text" id="file3" value="http://www.tohoho-web.com/index.htm"> <button id="btn3">OK</button> <script> document.getElementById("btn3").addEventListener("click", function(e) { var url = document.getElementById("file3").value; window.fetch(url) .then(function(response) { return response.blob(); }) .then(function(blob) { readBlobAsText(blob, 1024, function(state, data) { console.log("------onread------"); console.log("state=" + state); console.log("length=" + data.length); console.log("data=" + data); }); }); }); </script>