美文网首页
对HTML5 File 对象的读写组件编写

对HTML5 File 对象的读写组件编写

作者: sallerli1 | 来源:发表于2018-04-09 22:10 被阅读0次

最近几天在项目里面要在前端对文件进行加密操作之后再上传到后端,需要先从File对象中读出数据进行加密然后再生成一个新的File对象,自然就要用到 HTML5 的 FileReader 来处理。之前也写过一个分块读文件的组件,但是回去读了一下代码觉得设计的很不好,本来应该用单例却硬生生用了一个class,而且还仅仅只有读文件的操作,没有写文件。

去npm上看了一下,好像也没有完全符合需求的组件,没办法,就自己写了一个,现在放到npm上面去了。

github: https://github.com/sallerli1/html5-file-js
npm: https://www.npmjs.com/package/html5-file-js

安装

npm install html5-file-js

使用

具体的用法在ReadMe中都有写到,就不废话了。

思路分享

大部分代码都还是很简单的就一一拿出来说了,分享一下自己的学习成果吧

readChucks 的链式读取

这个链式读取主要是对Blob对象进行分割,利用闭包保存当前的读取进度和下一步需要分割的起点,在FileReader的 onload 事件中判断是否需要读取完成,未完成则继续分割下一部分进行读取。在代码中完全舍弃掉了 onerror 事件来处理异常的方法,而是将 FileReader 的error属性传入回掉函数进行处理,在外部调用就变得简单了很多,内部也少了不少代码,但是没有具体测试,不知道会发生什么不可预测的问题。

promisify

这回写的组件全部提供了 promisified 的调用方法,说来也很简单,就是返回一个 Promise 对象,在回调函数中判断如果没有异常则 resolve,有异常就 reject。(突然想起来前段时间面试官问我Promise有几种状态,明明有3中我却说了两种,面试官还没提出质疑,太给面子了)这样的好处当然很多,书写简单且易维护,还能避免由于异步执行而产生的错误。

写入File

现在只支持写入一个字符串或者写入一个 ArrayBuffer。
写字符串比较简单,读出原来File中的字符串然后拼接起来再 new 一个 File 对象就好了(new 了无数个对象了,就是没有对象!!!)。
写 ArrayBuffer 就要读出原来 File 中的 buffer,对两个 buffer 都取一个 Uint8Array 的 TypedArray,然后针对这两个buffer的长度新建一个ArrayBuffer,再前后把两个 buffer 写进去再 new 一个 File 对象(实在不想多写字了)

待解决的问题

分段读取文件为字符串时编码问题

分段读取文件的时候总是有可能从某一个字符中间切分开,而每一小段数据又会单独运行回调函数,就导致了在段尾出现乱码的问题,由于本人对编码了解实在太少,尚不能得出一个有效的解决办法。

还没有引入 Worker

考虑到文件的读写实际上是很消耗资源的操作,最好是使用 Worker 多线程进行处理,但是实测过,如果没有对文件进行加密等复杂操作,只是读取文件,读取的速度比起DOM操作的速度可是能快上100倍以上,而Worker又不能解决DOM操作速度的问题,就先没有引入Worker。

相关文章

  • 对HTML5 File 对象的读写组件编写

    最近几天在项目里面要在前端对文件进行加密操作之后再上传到后端,需要先从File对象中读出数据进行加密然后再生成一个...

  • 浅谈 HTML5 文件处理

    HTML5 文件 API FileList 对象与 file 对象 FileList 对象:表示用户选择的文件列表...

  • H5直播系列一 Blob File FileReader URL

    参考[HTML5] Blob对象理解DOMString、Document、FormData、Blob、File、A...

  • 小白学 python之——读写文件

    在Python 中,读写文件有3 个步骤:1.调用open()函数,返回一个File 对象。2.调用File 对象...

  • 2018-07-29

    为什么js不能操作本地文件 Html5——File、FileReader、Blob、Fromdata对象 Angu...

  • java-File类

    File类将文件和文件夹以及路径封装成对象,以提供更多的方法和属性来操作这些对象。File类不属于流对象,不能读写...

  • 2019-10-20

    HTML5 File API 在 HTML5 的 input 标签中,新增了一个 type=file 属性的表单控...

  • 文件操作

    路径 文件大小 路径有效性 文件读写 文件读写的三个步骤:1.调用open()函数,返回一个file对象;2.调用...

  • Kotlin-面向对象

    类与对象 1、新建文件File类型,File通常是用于编写Kotlin顶层函数和扩展函数的,可以点击展开下拉列表进...

  • 文件操作的基本流程

    1. 读写文 open() 返回一个 file object (文件对象),最常用的有两个参数: open(fi...

网友评论

      本文标题:对HTML5 File 对象的读写组件编写

      本文链接:https://www.haomeiwen.com/subject/dbjwhftx.html