JavaScript读取本地文件常用方法流程解析


Posted in Javascript onOctober 12, 2020

出于安全和隐私的原因,web 应用程序不能直接访问用户设备上的文件。如果需要读取一个或多个本地文件,可以通过使用input file和FileReader来实现。在这篇文章中,我们将通过一些例子来看看它是如何工作的。

文件操作的流程

获取文件

由于浏览器中的 JS 无法从用户的设备访问本地文件,我们需要为用户提供一种方法来选择一个或多个文件供我们使用。这可以通过文件选择器<input type='fule' />来完成。

<input type="file">

如果想允选择多个文件,可以添加multiple属性:

<input type="file" multiple>

我们可以通过change事件来监听文件的选择,也可以添加另一个 UI 元素让用户显式地开始对所选文件的处理。

input file 具有一个files属性,该属性是File对象的列表(可能有多个选择的文件)。

JavaScript读取本地文件常用方法流程解析

File对象如下所示:

JavaScript读取本地文件常用方法流程解析读取文件

读取文件,主要使用的是[FileReader][1]类。

「该对象拥有的属性:」

「FileReader.error」:只读,一个DOMException,表示在读取文件时发生的错误 。

「FileReader.readyState」:只读 表示 FileReader 状态的数字。取值如下:

常量名值描述EMPTY0还没有加载任何数据LOADING1数据正在被加载DONE2已完成全部的读取请求

「FileReader.result」:只读,文件的内容。该属性仅在读取操作完成后才有效,数据的格式取决于使用哪个方法来启动读取操作。

「该对象拥有的方法:」

readAsText(file, encoding):以纯文本形式读取文件,读取到的文本保存在result属性中。第二个参数代表编码格式。

readAsDataUrl(file):读取文件并且将文件以数据URI的形式保存在result属性中。

readAsBinaryString(file):读取文件并且把文件以字符串保存在result属性中。

readAsArrayBuffer(file):读取文件并且将一个包含文件内容的ArrayBuffer保存咋result属性中。

FileReader.abort():中止读取操作。在返回时,readyState属性为DONE。

「文件读取的过程是异步操作,在这个过程中提供了三个事件:progress、error、load事件。」

progress:每隔50ms左右,会触发一次progress事件。

error:在无法读取到文件信息的条件下触发。

load:在成功加载后就会触发。

在下面的示例中,我们将使用readAsText和readAsDataURL方法来显示文本和图像文件的内容。

例一:读取文本文件

为了将文件内容显示为文本,change需要重写一下:

JavaScript读取本地文件常用方法流程解析

首先,我们要确保有一个可以读取的文件。如果用户取消或以其他方式关闭文件选择对话框而不选择文件,我们就没有什么要读取和退出函数。

然后我们继续创建一个FileReader。reader的工作是异步的,以避免阻塞主线程和 UI 更新,这在读取大文件(如视频)时非常重要。

reader发出一个'load'事件(例如,类似于Image对象),告诉我们的文件已经读取完毕。

reader将文件内容保存在其result属性中。此属性中的数据取决于我们使用的读取文件的方法。在我们的示例中,我们使用readAsText方法读取文件,因此result将是一个文本字符串。

例二:显示本地选择的图片

如果我们想要显示图像,将文件读取为字符串并不是很有用。FileReader有一个readAsDataURL方法,可以将文件读入一个编码的字符串,该字符串可以用作<img>元素的源。本例的代码与前面的代码基本相同,区别是我们使用readAsDataURL读取文件并将结果显示为图像:

JavaScript读取本地文件常用方法流程解析总结

1)由于安全和隐私的原因,JavaScript 不能直接访问本地文件。

2)可以通过 input 类型为 file 来选择文件,并对文件进行处理。

3) file input 具有带有所选文件的files属性。

4) 我们可以使用FileReader来访问所选文件的内容。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript 应用技巧集合[推荐]
Aug 30 Javascript
javascript 跨浏览器开发经验总结(五) js 事件
May 19 Javascript
JavaScript中判断对象类型的几种方法总结
Nov 11 Javascript
javaScript对文字按照拼音排序实现代码
Dec 27 Javascript
JQuery中使用Ajax赋值给全局变量异常的解决方法
Jan 10 Javascript
JavaScript模块随意拖动示例代码
May 27 Javascript
Javascript自执行匿名函数(function() { })()的原理浅析
May 15 Javascript
基于vue+canvas的excel-like组件实例详解
Nov 28 Javascript
Vue 源码分析之 Observer实现过程
Mar 29 Javascript
vue写一个组件
Apr 09 Javascript
layui将table转化表单显示的方法(即table.render转为表单展示)
Sep 24 Javascript
Vue+element+cookie记住密码功能的简单实现方法
Sep 20 Javascript
vue实现移动端返回顶部
Oct 12 #Javascript
用JavaScript实现贪吃蛇游戏
Oct 23 #Javascript
手机浏览器唤起微信分享(JS)
Oct 11 #Javascript
js canvas实现俄罗斯方块
Oct 11 #Javascript
利用js canvas实现五子棋游戏
Oct 11 #Javascript
H5+css3+js搭建带验证码的登录页面
Oct 11 #Javascript
原生js生成图片验证码
Oct 11 #Javascript
You might like
给php新手谈谈我的学习心得
2007/02/25 PHP
Yii的Srbac插件用法详解
2016/07/14 PHP
PHP模版引擎原理、定义与用法实例
2019/03/29 PHP
js 对象是否存在判断
2009/07/15 Javascript
JavaScript(JS) 压缩 / 混淆 / 格式化 批处理工具
2010/12/10 Javascript
在JavaScript中构建ArrayList示例代码
2014/09/17 Javascript
基于jQuery+JSON的省市二三级联动效果
2015/06/05 Javascript
jquery彩色投票进度条简单实例演示
2020/07/23 Javascript
jQuery简单实现input文本框内灰色提示文本效果的方法
2015/12/02 Javascript
jquery插件锦集【推荐】
2016/12/16 Javascript
使用Vue开发动态刷新Echarts组件的教程详解
2018/03/22 Javascript
微信小程序自定义导航栏(模板化)
2019/11/15 Javascript
python查看微信好友是否删除自己
2016/12/19 Python
Python 爬虫图片简单实现
2017/06/01 Python
Python字符串和字典相关操作的实例详解
2017/09/23 Python
Python实现打印螺旋矩阵功能的方法
2017/11/21 Python
Django 使用Ajax进行前后台交互的示例讲解
2018/05/28 Python
Python中pandas dataframe删除一行或一列:drop函数详解
2018/07/03 Python
Python补齐字符串长度的实例
2018/11/15 Python
python 猴子补丁(monkey patch)
2019/06/26 Python
pandas中DataFrame修改index、columns名的方法示例
2019/08/02 Python
Python抓包程序mitmproxy安装和使用过程图解
2020/03/02 Python
OpenCV实现机器人对物体进行移动跟随的方法实例
2020/11/09 Python
python爬虫看看虎牙女主播中谁最“顶”步骤详解
2020/12/01 Python
CSS3样式linear-gradient的使用实例
2017/01/16 HTML / CSS
百思买加拿大:Best Buy Canada
2018/03/20 全球购物
我们没有写servlet的构造方法,那么容器是怎么创建servlet的实例呢
2013/04/24 面试题
师范生实习自我鉴定
2013/11/01 职场文书
学习党课思想汇报
2013/12/29 职场文书
环保建议书400字
2014/05/14 职场文书
工作时间擅自离岗检讨书
2014/10/24 职场文书
2015年宣传部个人工作总结
2015/05/14 职场文书
2016入党积极分子党课学习心得体会
2015/10/09 职场文书
python 解决微分方程的操作(数值解法)
2021/05/26 Python
MySQL 常见存储引擎的优劣
2021/06/02 MySQL
分享MySQL常用 内核 Debug 几种常见方法
2022/03/17 MySQL