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检查表单数据是否改变的方法
Jul 30 Javascript
使用 JavaScript 进行函数式编程 (一) 翻译
Oct 02 Javascript
聊一聊JavaScript作用域和作用域链
May 03 Javascript
详解React中的组件通信问题
Jul 31 Javascript
微信小程序顶部可滚动导航效果
Oct 31 Javascript
Node之简单的前后端交互(实例讲解)
Nov 14 Javascript
详解JS函数stack size计算方法
Jun 18 Javascript
详解@Vue/Cli 3 Invalid Host header 错误解决办法
Jan 02 Javascript
在Vue项目中使用jsencrypt.js对数据进行加密传输的方法
Apr 17 Javascript
vue动态配置模板 'component is'代码
Jul 04 Javascript
vue 实现Web端的定位功能 获取经纬度
Aug 08 Javascript
Vue 利用指令实现禁止反复发送请求的两种方法
Sep 15 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上的memcache和memcached两个pecl库
2010/03/29 PHP
php实现比较两个文件夹异同的方法
2015/06/18 PHP
PHP实现删除字符串中任何字符的函数
2015/08/11 PHP
Yii中CArrayDataProvider和CActiveDataProvider区别实例分析
2016/03/02 PHP
PHPExcel实现表格导出功能示例【带有多个工作sheet】
2018/06/13 PHP
基于PHP实现微信小程序客服消息功能
2019/08/12 PHP
php变量与字符串的增删改查操作示例
2020/05/07 PHP
PHP code 验证码生成类定义和简单使用示例
2020/05/27 PHP
浅析PHP echo 和 print 语句
2020/06/30 PHP
云网广告中的代码,提示出错,大家找找
2006/11/21 Javascript
javascript 面向对象编程基础:封装
2009/08/21 Javascript
利用了jquery的ajax实现二级联互动菜单
2013/12/02 Javascript
JS+CSS实现的蓝色table选项卡效果
2015/10/08 Javascript
jQuery AJAX timeout 超时问题详解
2016/06/21 Javascript
el表达式 写入bootstrap表格数据页面的实例代码
2017/01/11 Javascript
简单的vuex 的使用案例笔记
2018/04/13 Javascript
最全vue的vue-amap使用高德地图插件画多边形范围的示例代码
2020/07/17 Javascript
vue界面发送表情的实现代码
2020/09/11 Javascript
详解Python各大聊天系统的屏蔽脏话功能原理
2016/12/01 Python
Python3安装Scrapy的方法步骤
2017/11/23 Python
解决已经安装requests,却依然提示No module named requests问题
2018/05/18 Python
python学生信息管理系统(完整版)
2020/04/05 Python
python库matplotlib绘制坐标图
2019/10/18 Python
pandas实现DataFrame显示最大行列,不省略显示实例
2019/12/26 Python
Python如何实现小程序 无限求和平均
2020/02/18 Python
Python从MySQL数据库中面抽取试题,生成试卷
2021/01/14 Python
美国咖啡批发网站:Coffee.org
2017/06/29 全球购物
PHP经典面试题
2016/09/03 面试题
应届生体育教师自荐信
2013/10/03 职场文书
商务日语毕业生自荐信
2013/11/23 职场文书
我未来的职业规划范文
2014/01/11 职场文书
优秀毕业生自荐信
2014/06/10 职场文书
课外访万家心得体会
2014/09/03 职场文书
Python3 类型标注支持操作
2021/06/02 Python
java实现对Hadoop的操作
2021/07/01 Java/Android
zabbix自定义监控nginx状态实现过程
2021/11/01 Servers