File API文件操作之FileReader
近来研究点对点的文件传输,想到一种方案FileReader+WebRtc。
当我看到FileReader的时候,哎呀,不错的东西啊,仔细一看属于File API,或者叫做Web API。
File API 官方的文档 File API
MDN的Web APIs|MDN
MDN的 web引用中使用文件
其主要由,FileList,Blob,File,FileReader等组成。
这里我们主要探讨一下FileReader,先看看官方网站的接口定义
[Constructor, Exposed=Window,Worker]
interface FileReader: EventTarget { // async read methods
void readAsArrayBuffer(Blob blob);
void readAsText(Blob blob, optional DOMString label);
void readAsDataURL(Blob blob); void abort(); // states
const unsigned short EMPTY = ;
const unsigned short LOADING = ;
const unsigned short DONE = ; readonly attribute unsigned short readyState; // File or Blob data
readonly attribute (DOMString or ArrayBuffer)? result; readonly attribute DOMError? error; // event handler attributes
attribute EventHandler onloadstart;
attribute EventHandler onprogress;
attribute EventHandler onload;
attribute EventHandler onabort;
attribute EventHandler onerror;
attribute EventHandler onloadend; };
首先可以看出来,他继承的是EventTarget,这说明什么,哈哈,下面是主要的属性,方法,事件,最好是参考官网API文档。
主要的属性
readySate:状态,对应三个枚举值,EMPTY,LOADING,DONE
result : 读取完毕后的内容,一般onload后调用。
error: 错误,NotFoundError,SecurityError,NotReadableError
主要方法:
readAsArrayBuffer:
readAsText:
readAsDataUrl:
主要事件:
onloadstart:准备就绪,开始读取
onprogress:在读取或者解码
onload:读取完毕
onbort:终止,例如调用abort方法
onerror:发生错误
onloadend:读操作完毕,不管是读取成功还是失败
我就不多说,今天演练的是readAsText,我想到的场景就是在线文本比较,在线JSON格式化,在线文本编辑。
来吧,少年,在线JSON格式化,50行代码做个demo。
源码路径:https://github.com/xiangwenhu/BlogCodes
html代码:
<!DOCTYPE>
<html> <head>
<title>FileReader 之 readAsText</title>
</head> <body style="margin: 2rem auto">
<div id="container" style="margin-left: 5rem">
<input type="file" id="file" onchange="handleFiles(this.files)" />
<div id="results"></div>
</div>
</body>
<script src="js/readAsText.js"></script> </html>
js代码:
function handleFiles(files) {
if (files.length) {
let file = files[0], reader = new FileReader()
reader.onload = () => {
(new JSONParser(reader.result, '#results')).init()
}
reader.readAsText(file)
}
}
class JSONParser {
constructor(source, selector) {
this.source = source
this.selector = selector
this.results = []
this.deep = 0
}
init() {
try {
let json = JSON.parse(this.source)
this.format(undefined, json)
document.querySelector(this.selector).innerHTML = this.results.join('<br/>')
} catch (e) {
alert(e)
}
}
format(key = '', value) {
if (value instanceof Array) {
this.results.push(this.generateLine(key, '['))
this.deep++
value.forEach((v, i) => {
this.format(i, v)
})
this.deep--
this.results.push(this.generateLine(undefined, ']'))
} else if (value && typeof value == 'object') {
this.results.push(this.generateLine(key, '{'))
Object.keys(value).forEach(k => {
this.deep++
this.format(k, value[k])
this.deep--
})
this.results.push(this.generateLine(undefined, '}'))
} else {
this.results.push(this.generateLine(key, value))
}
}
generateLine(key, value) {
let k = key === undefined || key === '' ? '' : `${key}:`,
v = value === null ? 'null' : value
return ' '.repeat(this.deep) + `${k}${v}`
}
}
效果:
File API文件操作之FileReader的更多相关文章
- File API文件操作之FileReader二
上一篇说了FileAPI中FileReader的readAsText,这里继续上文,说说另外一个API readAsDataURL. 这个接口是将File或者Blob读成base64格式的字符串,然后 ...
- JAVASE02-Unit06: 文件操作——File 、 文件操作—— RandomAccessFile
Unit06: 文件操作--File . 文件操作-- RandomAccessFile java.io.FileFile的每一个实例是用来表示文件系统中的一个文件或目录 package day06; ...
- [转]JavaScript文件操作(2)-FileReader
在上篇文章中,我介绍了在JavaScript操作文件,重点讲了如何取得File对象. 这些对象包含的文件的元数据在上传或者拖放到浏览器中时可以获取到.有了文件当然接下来就是读取文件了. FileRea ...
- C使用FILE指针文件操作
文件的基本概念 所谓“文件”是指一组相关数据的有序集合. 这个数据集有一个名称,叫做文件名.实际上在前面的各章中我们已经多次使用了文件,例如源程序文件.目标文件.可执行文件.库文件 (头文件)等.文件 ...
- 【File】文件操作(初识文件操作一)
一,初识文件流 看到标题就知道接下来的所有操作对象都是面对文件进行的.那么问题来了.在java中目录是不是也属于文件呢?答案是yes.既然目录也属于文件,那么对于目录跟文件的区分就显现出来了.在接下来 ...
- win32 api 文件操作!
CreateFile打开文件要对文件进行读写等操作,首先必须获得文件句柄,通过该函数可以获得文件句柄,该函数是通向文件世界的大门. ReadFile从文件中读取字节信息.在打开文件获得了文件句柄之后, ...
- day8.python文件操作
打开和关闭文件 open函数 用Python内置的open()函数打开一个文件,创建一个file对象,相关的方法才可以调用它进行读写. file = open(file_name [, access_ ...
- ASP.NET 文件操作类
1.读取文件 2.写入文件 using System; using System.Collections.Generic; using System.IO; using System.Linq; us ...
- python 文件操作(二)
一. 文件的读写 1.找到文件 文件路径:./test.py 2.打开文件 open('文件路径','模式') 模式: r, 以只读的方式打开 w, 打开一个文件只用于写入,如文件已存在,直接重 ...
随机推荐
- c++邻接表存储图(无向),并用广度优先和深度优先遍历(实验)
一开始我是用c写的,后面才发现广搜要用到队列,所以我就直接使用c++的STL队列来写, 因为不想再写多一个队列了.这次实验写了两个多钟,因为要边写边思考,太菜了哈哈. 主要参考<大话数据结构&g ...
- 基于Java使用Snmp4j进行监控与采集(snmptrap、snmpwalk、snmpget)
之前有在弄监控服务器这块的工作,今天来整体总结下.因为有些服务器(路由器.交换机等都是基于snmp协议的)必须使用snmp协议去监控采集和接收信息,所以必须去了解snmp相关内容,以及如何在基于jav ...
- Linux中如何恢复rm命令误删除的文件之extundelete编译安装及使用
1.下载extundelete包,安装依赖 我用的是Centos系统,在安装extundelete之前需要安装e2fsprogs,e2fsprogs-libs,e2fsprogs-devel. yum ...
- TRITON恶意软件简单分析与防护方案
一.攻击简介 2017年12月,安全研究人员发现了一款针对工控系统安全仪表系统(SIS)的恶意软件"TRITON",该软件以施耐德电气Triconex安全仪表控制系统为目标展开攻击 ...
- Android Service组件在新进程绑定(bindService)过程
1.首先看两个样例 (1)进程内 Client端 public class CounterService extends Service implements ICounterService { .. ...
- EventBus在Android中的简单使用
EventBus是一个方便与Android中各组件通信的开源框架,开源地址;https://github.com/greenrobot/EventBus.EventBus功能非常强大 ,今天在做一个功 ...
- Tkinter界面编程(一)----函数分析
Tkinter模块是python比较常用的GUI界面设计模块,首先对相关的函数进行分析. 一 .创建根窗口相关的函数说明 import tkinter as tk top = tk.Tk() # 创建 ...
- springboot整合系列
Spring Boot 系列 博客原文:http://blog.csdn.net/isea533/article/details/50412212 Spring Boot 入门 Spring Boot ...
- [.Net跨平台]部署DTCMS到Jexus遇到的问题及解决思路---Linux环境搭建
最近朋友托我帮忙研究如何把一个DTCMS部署到Linux下,经过1天的研究,部署基本成功,可能有些细节还未注意到,现在把心得分享一下.过程比预期的要简单 身为.Net程序员,这个问题的第一步可能就是如 ...
- CSS图片文字同行居中
img{ display:inline-block; vertical-align:middle; }