file对象选择文件
fileReader 对象允许Web应用程序异步读取用户计算机上的文件或数据。
html5中,通过添加 multiple属性,在file控件内允许一次性放置多个文件。
语法:
<input type="file" multiple id="file">
例子:
<input type="file" multiple id="file" onchange="node(this)">
<script>
// onchange 在域的内容改变时发生触发。
function node(e){
console.log(e.files);
}
</script>
html5 中新增的⽂件操作:
- File:代表⼀个⽂件对象
- FileList:代表⼀个⽂件列表对象,类数组
- FileReader:⽤于从⽂件中读取数据
- FileWriter:⽤于向⽂件中写出数据
调⽤ fileReader 对象的⽅法
创建一个FileReader对象
var fReader = new FileReader();
⽅法名 | 参数 | 描述 |
---|---|---|
abort | none | 中断读取 |
readAsBinaryString | file | 将⽂件转化为⼆进制码 |
readAsDataURL | file | 将⽂件读取为 DataURL |
readAsText | file,[encoding] | 将⽂件读取为⽂本 |
需要注意的是,⽆论读取成功或是失败,⽅法并不会返回读取结果,这⼀结果(储存在 result 属性中)要⽤ FileReader 处理事件去获取;
readAsText:该⽅法有两个参数,其中第⼆个参数是⽂本的编码⽅式,默认值为 UTF-8。这个⽅法⾮常容
易理解,将⽂件以⽂本⽅式读取,读取的结果即是这个⽂本⽂件中的内容。
readAsBinaryString:该⽅法将⽂件读取为⼆进制字符串,通常我们将它传送到后端,后端可以通过这段字
符串存储⽂件。
readAsDataURL:这是例⼦程序中⽤到的⽅法,该⽅法将⽂件读取为⼀段以 data: 开头的字符串,这段字符串的实质就是Data URL,Data URL是⼀种将⼩⽂件直接嵌⼊⽂档的⽅案。这⾥的⼩⽂件通常是指图像与 html等格式的⽂件。
属性
属性 | 描述 |
---|---|
error | 在读取文件时发生的错误 |
readyState | 表明FileReader对象的当前状态 |
result | 读取到的文件内容 |
事件监听函数
FileReader 包含了⼀整套完成的事件模型,⽤于捕获读取⽂件时的状态,下⾯这个表格归纳了这些事件。
事件 | 描述 |
---|---|
onabort | 中断时触发 |
onerror | 出错时触发 |
onload | ⽂件读取成功完成时触发 |
onloadend | 读取完成时触发,⽆论读取成功或失败 |
onloadstart | 读取开始时触发 |
onprogress | 读取中 |
实例:
<!DOCTYPE html>
<html>
<head>
<style>
.box {
width: 200px;
}
img {
width: 100%;
}
</style>
</head>
<body>
<!-- 文件上传 input 类型是 file -->
<!-- multiple 属性,表示可以添加多个文件 -->
<label for="">
单图片上传:<input type="file" name="" id="" class="add">
</label>
<label for="">
多文件上传:<input type="file" multiple name="" id="" class="more">
</label>
<label for="">
单个文件上传:<input type="file" name="" id="" class="txt">
</label>
<div class="box">
</div>
<script>
var add = document.querySelector(".add");
var box = document.querySelector(".box");
var more = document.querySelector(".more");
var txt = document.querySelector(".txt");
// 单个文件上传
add.onchange = function () {
// 上传的文件
var fs = this.files[0];
// 实例化FileReader
var myReader = new FileReader();
// readAsDataURL 把文件转为url
myReader.readAsDataURL(fs);
// 文件读取完成时触发
myReader.onload = function () {
console.log(myReader.result);
box.innerHTML = "<img src=" + myReader.result + ">";
}
}
// 多个文件
more.onchange = function () {
// 上传的文件
var fs = [...this.files];
fs.forEach(function (item) {
var myReader = new FileReader();
// readAsDataURL 把文件转为url
myReader.readAsDataURL(item);
// 文件读取完成时触发
myReader.onload = function () {
console.log(myReader.result);
box.innerHTML += "<img src=" + myReader.result + ">";
}
})
}
// 单个 text
txt.onchange = function () {
// 上传的文件
var fs = this.files[0];
// 实例化FileReader
var myReader = new FileReader();
// readAsDataURL 把文件转为url
myReader.readAsText(fs);
// 文件读取完成时触发
myReader.onload = function () {
console.log(myReader.result);
box.innerHTML = "<span>" + myReader.result + "</span>";
}
}
</script>
</body>
</html>