使用JS操作文件(FileReader读取--node的fs)

目录
  • JS读取文件 FileReader
    • 文档
    • 事件和方法
    • 基本使用
    • 事件处理
    • node操作文件(readfile)
    • 文件读取是一个异步操作
    • 使用Promise
    • 文件的写入

JS读取文件 FileReader

FileReader 对象允许Web应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容,使用 File 或 Blob 对象指定要读取的文件或数据。

文档

FileReader

事件和方法

事件处理

FileReader.onabort 处理abort事件。该事件在读取操作被中断时触发。
FileReader.onerror 处理error事件。该事件在读取操作发生错误时触发。
FileReader.onload 处理load事件。该事件在读取操作完成时触发。
FileReader.onloadstart 处理loadstart事件。该事件在读取操作开始时触发。
FileReader.onloadend 处理loadend事件。该事件在读取操作结束时(要么成功,要么失败)触发。
FileReader.onprogress 处理error事件。该事件在读取操作发生错误时触发。

标准方法

  • FileReader.abort()
  • 中止读取操作。在返回时,readyState属性为DONE。
  • FileReader.readAsArrayBuffer()
  • 开始读取指定的 Blob中的内容, 一旦完成, result 属性中保存的将是被读取文件的 ArrayBuffer 数据对象.
  • FileReader.readAsDataURL()
  • 开始读取指定的Blob中的内容。一旦完成,result属性中将包含一个data: URL格式的字符串以表示所读取文件的内容。
  • FileReader.readAsText()
  • 开始读取指定的Blob中的内容。一旦完成,result属性中将包含一个字符串以表示所读取的文件内容。

基本使用

文件的准备read.txt(随便读取电脑的文件都可以)

HTML结构

<input type="file" multiple>

JS调用

<script>
	window.onload = function(){
		var inpFile = document.querySelector('input[type=file]')
		inpFile.addEventListener('change', function(){
			var reader = new FileReader()
			// 发送异步请求
			// 0.使用readAsText方法(读取结果普通文本)
			reader.readAsText(this.files[0])
			// 读取成功的结果:已经成功读取文件(计算机上的文件read.txt)
			reader.onload = function(){
    		//读取完成后,数据保存在对象的result属性中
    		console.log(this.result)//打印:已经成功读取文件
  			}
		})
	}
</script>

JS调用使用其它方法(其它方法也是一样使用)

readAsDataURL

window.onload = function(){
		var inpFile = document.querySelector('input[type=file]')
		inpFile.addEventListener('change', function(){
			var reader = new FileReader()
			// 使用readAsDataURL(获取base64编码)
			reader.readAsDataURL(this.files[0])
			reader.onload = function(){
    		console.log(this.result)
    		//data:text/plain;base64,5bey57uP5oiQ5Yqf6K+75Y+W5paH5Lu2
  			}
		})
	}

事件处理

JS调用(还是使用上面的html和文件–或则准备更大的文件;效果会更好)

window.onload = function(){
		var inpFile = document.querySelector('input[type=file]')
		inpFile.addEventListener('change', function(){
			var reader = new FileReader()
			reader.readAsText(this.files[0])
			var count = 0;
			reader.onloadstart = function(){
				console.log("onloadstart状态"+this.readyState)
    			console.log("开始加载")
  			}
  			reader.onloadend= function(){
  				console.log("onloadend状态"+this.readyState)
    			console.log("加载结束")
  			}
  			reader.onprogress = function(){
  				count++;
  				console.log("onprogress状态"+this.readyState)
    			console.log("加载中"+count)
  			}
			reader.onload = function(){
    			console.log("onload拿到的数据为"+this.result)
    			console.log("状态"+this.readyState)
  			}
  			reader.onerror = function(){
    			console.log('出错了')
  			}
  			reader.onerror = function(){
    			console.log('处理abort事件。该事件在读取操作被中断时触发。')
  			}
		})
	}

结果如下

重要结果分析:

  • 状态1(readyState):数据正在被加载
  • 状态2:已完成全部的读取请求.
  • 当然状态为0(readyState)表示还没有加载任何数据.
  • 每过50ms左右,就会触发一次progress事件;也就是说这个可能多次触发,onload事件在onloadend之前触发。
  • 由于种种原因无法读取文件时,会触发error事件。触发error事件时,相关信息保存在FileReader对象的error属性中,这个属性将保存一个对象,此对象只有一个属性code,即错误码。1表示未找到文件,2表示安全性错误,3表示读取中断,4表示文件不可读,5表示编码错误。
  • 如果想中断读取过程,可以调用abort方法,就会触发abort事件。在返回时,readyState属性为DONE。一般用于后台的操作。

node操作文件(readfile)

根据以上可知,浏览器中的 JavaScript 是没有文件操作的能力的(基于安全,不能直接操作本地文件),但是 Node 中的 JavaScript 具有文件操作的能力

node怎么读取文件(安装node可以直接忽略看代码)

  • 首先要安装node环境(很简单,网上很多教程),最好也安装nodemon
  • 打开你的cmd,也可以使用git
  • 创建JS文件
  • 加载node的核心模块
  • 使用readFile
  • 在cmd输入node 文件名.js
// 1. 使用 require 方法加载 fs 核心模块
var fs = require('fs')
// 2. 读取文件
//    第一个参数就是要读取的文件路径
//    第二个参数是一个回调函数
//        成功
//          data 数据
//          error null
//        失败
//          data undefined没有数据
//          error 错误对象
fs.readFile('read.txt', function (error, data) {
  // 在这里就可以通过判断 error 来确认是否有错误发生
  if (error) {
    console.log('读取文件失败了')
  } else {
    console.log(data.toString())
  }
})

结果

文件读取是一个异步操作

当我们读取多个文件,发现使用readfile读取文件并不能一定按顺序打印结果,所以这是一个异步操作,如何顺序读取文件。

使用Promise

var fs = require('fs')
function pReadFile(filePath) {
  return new Promise(function (resolve, reject) {
    fs.readFile(filePath, 'utf8', function (err, data) {
      if (err) {
        reject(err)
      } else {
        resolve(data)
      }
    })
  })
}
pReadFile('./data/a.txt')
  .then(function (data) {
    console.log(data)
    return pReadFile('./data/b.txt')
  })
  .then(function (data) {
    console.log(data)
    return pReadFile('./data/c.txt')
  })
  .then(function (data) {
    console.log(data)
  })

文件的写入

fs.writeFile('read.txt', '大家好,给大家介绍一下,我是文件写入', function (error) {
  if (error) {
    console.log('写入失败')
  } else {
    console.log('写入成功了')
  }
})

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • JS+HTML5 FileReader对象用法示例

    本文实例讲述了JS+HTML5 FileReader对象用法.分享给大家供大家参考,具体如下: FileReader 实例中有四个方法来读取文件数据 1.readAsBinaryString(Blob|File) 2.readAsDataURL(Blob|File) 3.readAsText(Blob|File) 4.readAsArrayBuffer(Blob|File) FileReader 实例包含很多事件(onerror, onprogress, onload[result]) <inp

  • JavaScript通过filereader接口读取文件

    使用FileReader接口的readAsDataURL方法实现图片的预览. 源代码: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>通过filereader接口读取文件</title> <script type="text/javascript"

  • JavaScript html5利用FileReader实现上传功能

    本文实例为大家分享了H5利用FileReader上传文件的具体代码,供大家参考,具体内容如下 1. Html部分 <h2>文件上传演练</h2> <div id="result"> <!-- 这里用来显示读取结果 --> <div id="inResult"> <div id="inImgs"></div> <div id="imgInfo&quo

  • 使用JS操作文件(FileReader读取--node的fs)

    目录 JS读取文件 FileReader 文档 事件和方法 基本使用 事件处理 node操作文件(readfile) 文件读取是一个异步操作 使用Promise 文件的写入 JS读取文件 FileReader FileReader 对象允许Web应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容,使用 File 或 Blob 对象指定要读取的文件或数据. 文档 FileReader 事件和方法 事件处理 FileReader.onabort 处理abort事件.该事件在读取操作被

  • JS操作Cookies包括(读取添加与删除)

    一直都是简单去js实现cookie的一些操作,今天把js对cookie操作系统的整理了一遍,包括:js读取cookie,js添加cookie,js删除cookie,示例如下: 复制代码 代码如下: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http

  • C++操作文件进行读取、删除、修改指定行

    代码如下: /******************************************************** Copyright (C), 2016-2018, FileName: main Author: woniu201 Created: 2018/08/31 Description: 文件操作:读取指定行,删除指定行,修改指定行 ********************************************************/ #include <iost

  • Node.js Streams文件读写操作详解

    Node.js 天生异步和事件驱动,非常适合处理 I/O 相关的任务.如果你在处理应用中 I/O 相关的操作,你可以利用 Node.js 中的流(stream).因此,我们先具体看看流,理解一下它们是怎么简化 I/O 操作的吧. 流是什么 流是 unix 管道,让你可以很容易地从数据源读取数据,然后流向另一个目的地. 简单来说,流不是什么特别的东西,它只是一个实现了一些方法的 EventEmitter .根据它实现的方法,流可以变成可读流(Readable),可写流(Writable),或者双向

  • js利用FileReader读取本地文件或者blob方式

    目录 FileReader读取本地文件或blob 一.FileReader的使用 二.FileReader的方法 三.FileReader的属性 四.FileReader的事件 使用FileReader读取本地磁盘文件问题 FileReader读取本地文件或blob FileReader对象提供了异步读取存储在用户计算机上的文件的内容,使用 File或 Blob 对象指定要读取的文件或数据,FileReader接口提供了读取文件的方法和包含读取结果的事件模型. 一.FileReader的使用 注

  • Node.js中文件操作模块File System的详细介绍

    File System的缩写是fs,该模块提供本地文件的读写能力. Nodejs导入文件系统模块(fs)语法如下所示: var fs = require("fs"); 异步和同步 Node.js文件系统(fs模块)模块中的方法均有异步和同步版本,例如读取文件内容的函数有异步的fs.readFile()和同步的fs.readFileSync() . 异步的方法函数最后一个参数为回调函数,回调函数的第一个参数包含了错误信息(error).同步则没有回调函数. 建议大家是用异步方法,比起同步

  • Node.js本地文件操作之文件拷贝与目录遍历的方法

    文件拷贝 NodeJS 提供了基本的文件操作 API,但是像文件拷贝这种高级功能就没有提供,因此我们先拿文件拷贝程序练手.与 copy 命令类似,我们的程序需要能接受源文件路径与目标文件路径两个参数. 小文件拷贝 我们使用 NodeJS 内置的 fs 模块简单实现这个程序如下. var fs = require('fs'); function copy(src, dst) { fs.writeFileSync(dst, fs.readFileSync(src)); } function main

  • JS如何通过FileReader获取.txt文件内容

    目录 JS通过FileReader获取.txt文件内容 读取.txt文件方法 JS: FileReader()读取文件 下面开始实际例子 读取txt文件 读取图片文件 JS通过FileReader获取.txt文件内容 最近处理一个需求是,通过js解析.txt文件来做一些处理,在这里做一些总结. 读取.txt文件方法 var reader = new FileReader(); var fileUploader = document.getElementById("fileUploader&quo

  • node.js操作MongoDB的实例详解

    node.js操作MongoDB时,需要安装mongodb包 1.使用npm安装cnpm npm install -g cnpm --registry=https://registry.npm.taobao.org 2.使用cnpm安装mongodb包 cnpm install mongodb node.js操作MongoDB时的四种方式:插入数据.更新数据.删除数据.查找数据. 操作步骤 步骤1 创建执行文件xx.js 步骤2 终端调用执行文件 node xx.js 注意: 操作前需要启动服务

  • js操作XML文件的实现方法兼容IE与FireFox

    最近项目中用到了xml,需求是用户安装产品时先把一系列的数据保存到xml文件中,当执行到最后一步时才写入数据库,这样最大限度的减少了数据库的访问,于是不得不纠结在各浏览器的兼容性的问题(悲哀啊....) 进入正文 下面是一个xml文件 (createInstal.xml) <?xml version="1.0" encoding="utf-8"?> <info> <Item> <id descrption="级别&

随机推荐