多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] * * * * * [参考文章](https://javascript.ruanyifeng.com/htmlapi/file.html#toc3) ### `FileReader` API `FileReader` 对象允许Web应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容,它的参数是 `File` 或 `Blob` 对象。[传送门](https://developer.mozilla.org/zh-CN/docs/Web/API/FileReader) 其中`File`对象可以是来自用户在一个 `<input>`元素上选择文件后返回的`FileList`对象,也可以来自拖放操作生成的`DataTransfer`对象,还可以是来自在一个`HTMLCanvasElement`上执行`mozGetAsFile()`方法后返回结果。 该API 的兼容性 [查看FileReader兼容性](https://caniuse.com/#search=FileReader) #### 1、 `FileReader` 的读取文件的方法 - `readAsBinaryString(Blob|File)`:返回二进制字符串,该字符串每个字节包含一个0到255之间的整数。 - `readAsText(Blob|File, opt_encoding)`:返回文本字符串。默认情况下,文本编码格式是’UTF-8’,可以通过可选的格式参数,指定其他编码格式的文本。 - `readAsDataURL(Blob|File)`:返回一个基于Base64编码的data-uri对象。 - `readAsArrayBuffer(Blob|File)`:返回一个ArrayBuffer对象。 - `abort()` 中断读取 FileReader 的实例拥有 4 个方法,其中 3 个用以读取文件,另一个用来中断读取。需要注意的是 ,无论读取成功或失败,方法并不会返回读取结果,这一结果存储在 result属性中。 #### 2、 `FileReader` 的事件 - `onabort`方法:读取中断或调用reader.abort()方法时触发。 - `onerror`方法:读取出错时触发。 - `onload`方法:读取成功后触发。 - `onloadend`方法:读取完成后触发,不管是否成功。触发顺序排在 onload 或 onerror 后面。 - `onloadstart`方法:读取将要开始时触发。 - `onprogress`方法:读取过程中周期性触发。 文件一旦开始读取,无论成功或失败,实例的 result 属性都会被填充。如果读取失败,则 result 的值为 null ,否则即是读取的结果,绝大多数的程序都会在成功读取文件的时候,抓取这个值 #### 3. `FileReader` 的用法 当文件读取时,会触发响应的事件,我们可以从事件对象中获取文件流的一些信息,并且文件读取的结果会储存在result这个属性中。需要注意的是,读取文件的方法不能同时进行。 ```JavaScript let inp = document.getElementById('file') inp.onchange = function(e){ let file = e.target.files[0] let fileReader = new FileReader() //返回二进制字符串,该字符串每个字节包含一个0到255之间的整数。 fileReader.readAsBinaryString(file) // fileReader.readAsText(file) // fileReader.readAsDataURL(file) // fileReader.readAsArrayBuffer(file) fileReader.onload = function(reesult){ console.log(e) } fileReader.onprogress = function(e){ console.log(e) } } ``` ### Image 对象 [参考文章](http://javascript.ruanyifeng.com/dom/image.html) #### 1. Image的使用 `<img>`元素用于插入图片,主要继承了 HTMLImageElement 接口。 浏览器提供一个原生构造函数Image,用于生成HTMLImageElement实例。 ```JavaScript var img = new Image(); img instanceof Image // true img instanceof HTMLImageElement // true ``` `Image`构造函数可以接受两个整数作为参数,分别表示`<img>`元素的宽度和长度。 ```JavaScript // 语法 Image(width, height) // 用法 var myImage = new Image(100, 200); ``` #### 2. Image的一些属性 > HTMLImageElement.src属性返回图像的完整网址。 > HTMLImageElement.currentSrc属性返回当前正在展示的图像的网址。JavaScript 和 CSS 的 mediaQuery 都可能改变正在展示的图像。 > HTMLImageElement.alt属性可以读写<img>的 HTML 属性alt,表示对图片的文字说明。 > HTMLImageElement.isMap属性对应<img>元素的 HTML 属性ismap,返回一个布尔值,表示图像是否为服务器端的图像映射的一部分。 > HTMLImageElement.useMap属性对应<img>元素的 HTML 属性usemap,表示当前图像对应的<map>元素。 > HTMLImageElement.srcset属性 读写<img>元素的srcset属性 > HTMLImageElement.sizes属性 读写sizes属性 > HTMLImageElement.naturalWidth属性和HTMLImageElement.naturalHeight属性 分别返回图像的实际宽度和高度 > HTMLImageElement.width和HTMLImageElement.height 返回img属性中的width和height 如果没有则返回图像的实际宽度和高度 > HTMLImageElement.complete属性返回一个布尔值,表示图表是否已经加载完成。如果<img>元素没有src属性,也会返回true。 > HTMLImageElement.crossOrigin属性用于读写<img>元素的crossorigin属性,表示跨域设置。这个属性有两个可能的值:anonymous:跨域请求不要求用户身份(credentials),这是默认值;use-credentials:跨域请求要求用户身份。 > HTMLImageElement.referrerPolicy用来读写<img>元素的 HTML 属性referrerpolicy,表示请求图像资源时,如何处理 HTTP 请求的referrer字段。 > HTMLImageElement.x属性返回图像左上角相对于页面左上角的横坐标,HTMLImageElement.y属性返回纵坐标。 #### 3. Image的事件 图像加载完成会触发 onload 事件, 加载失败会触发 onerror 事件, 需要注意的是在Image 未加载完成前,是访问不到他的一些属性(比如宽,高等)的 ```JavaScript let img = new Image() img.src = "http://www.webxiaoma.com/assets/images/manong.jpg" img.onload = function(){ console.log(img.width) console.log(img.height) } ``` ### FormData 对象 > XMLHttpRequest Level2添加了一个新的接口FormData. 利用FormData对象,我们可以通过JavaScript用一些键值对来模拟一系列表单控件,我们还可以使用XMLHttpRequest的send()方法来异步的提交这个"表单".比起普通的ajax,使用FormData的最大优点就是我们可以异步上传一个二进制文件. FormData对象的操作方法,全部在原型中,自己本身没任何的属性及方法。 > append(key,value) 方法向 formData 添加key/value > delete(key) 方法删除指定的key > entries() 方法返回一个迭代器,允许遍历该对象中包含的所有键/值对 > forEach() 方法遍历formData key/value并执行回调函数 > get(key) 方法获取指定key的值 > getAll(key) 方法获取指定key下边的所有值 > has(key) 方法判断某个key是否存在formData中 > keys() 方法返回一个迭代器,允许遍历该对象中包含的键/值对的所有键 > set(key,value) 在FormData对象中设置一个现有键的新值,或者在不存在的情况下添加键/值 > values() 方法返回一个迭代器,允许遍历该对象中包含的键/值对的所有值 ```JavaScript let formData = new FormData() formData.append('name','King') formData.append('age',12) formData.append('name','hong') formData.get('name') // King formData.getAll('name') //["King", "hong"] ```