1. 文件读取函数
readAsBinaryString() 读取文件内容,读取结果为一个 binary string。文件每一个 byte 会被表示为一个 [0..255] 区间内的整数。函数接受一个 File 对象作为参数。
readAsText() 读取文件内容,读取结果为一串代表文件内容的文本。函数接受一个 File 对象以及文本编码名称作为参数。
readAsDataURL 读取文件内容,读取结果为一个 data: 的 URL。DataURL 由 RFC2397 定义,具体可以参考 http://www.ietf.org/rfc/rfc2397.txt。
2. 文件读取事件
Onloadstart 文件读取开始时触发。
Progress 当读取进行中时定时触发。事件参数中会含有已读取总数据量。
Abort 当读取被中止时触发。
Error 当读取出错时触发。
Load 当读取成功完成时触发。
Loadend 当读取完成时,无论成功或者失败都会触发。
<form name="demoForm" id="demoForm" method="post" enctype="multipart/form-data" onsubmit="uploadAndSubmit();return false;"> <p>Upload File: <input type="file" name="file" /></p> <p><input type="submit" value="Submit" /></p> </form> <div>Progessing (in Bytes): <span id="bytesRead"> </span> / <span id="bytesTotal"></span> </div>
function uploadAndSubmit() { var form = document.forms["demoForm"]; if (form["file"].files.length > 0) { // 寻找表单域中的 <input type="file" ... /> 标签 var file = form["file"].files[0]; // try sending var reader = new FileReader(); C.log(reader); reader.onloadstart = function() { // 这个事件在读取开始时触发 C.log("onloadstart"); document.getElementById("bytesTotal").textContent = file.size; } reader.onprogress = function(p) { // 这个事件在读取进行中定时触发 C.log("onprogress"); document.getElementById("bytesRead").textContent = p.loaded; } reader.onload = function() { // 这个事件在读取成功结束后触发 console.log("load complete"); } reader.onloadend = function() { // 这个事件在读取结束后,无论成功或者失败都会触发 if (reader.error) { C.log(reader.error); } else { document.getElementById("bytesRead").textContent = file.size; C.log(reader.readyState); } } reader.readAsBinaryString(file); } else { C.log("请选择上传文件"); } } var C = { // console wrapper debug: true, // global debug on|off quietDismiss: false, // may want to just drop, or alert instead log: function() { if (!C.debug) return false; if (typeof console == 'object' && typeof console.log != "undefined") { console.log.apply(this, arguments); } else { if (!C.quietDismiss) { var result = ""; for (var i = 0, l = arguments.length; i < l; i++) result += arguments[i] + " ("+typeof arguments[i]+") "; var elem = document.createElement("textarea"); elem.innerHTML = result; document.body.appendChild(elem); } } } }; // end console wrapper.
fileAPI Demo:fileAPI.zip
