0

0

介绍前端的文件流flie

coldplay.xixi

coldplay.xixi

发布时间:2020-10-30 17:31:50

|

3387人浏览过

|

来源于juejin

转载

javascript栏目介绍前端的文件流flie。

介绍前端的文件流flie

背景

领导提出一个问题,能不能不借助端的能力,实现本地分段读取数据分段显示。在没有特别大的性能要求或者明确提出要求的情况下一般是一次性加载所有的数据并渲染,但是如果数据量大或者手机性能不好的话就会有别的问题了。

听到这个的时候我是懵逼的,我啥也不知道,但是我同事实现了,写了一个简单的demo

前端的实现

假设只上传一个文件

  1. 上传文件目前前端最常见的是借助 input 的 type='file'(还有DataTransfer和HTMLCanvasElement可以实现,不介绍了)File

    立即学习前端免费学习笔记(深入)”;

  2. 文件上传成功之后就会返回一个FileList 对象(event.target.files[0]里面包含了所有与文本相关的信息,包括文本流,文本流我们可能肉眼不可见)

console.log('[FileList 对象]:',event.target.files[0])

  1. File接口是基于Blod,所以Blod有的属性和方法,File也会有,比如slice=> 截取源 Blob 对象中指定范围内的数据,text=>返回一个promise且包含blob所有内容的UTF-8格式(就是把我们blod转化为我们可以读懂的utf-8的格式)
  const fileDate = event.target.files[0]
  let text = await fileDate.slice(1, 10).text()
  console.log('[截取一段Blod对象]', fileDate.slice(1, 10));
  console.log('[Blod对象转化为文本]', text);复制代码
  1. 既然FileList 对象继承于Blod对象,Blod对象对象又有slice和text方法。所以之前的那个需求就很好实现了

具体实现我还么有写,思路到这里,日后补上

Blob

Blob/slice

File

Input/file

其他与流有关的API

我记得很早之前写过不借助端的力量实现本地上传预览图片音频文件,那个时候就有提到过用过Blod对象,FileReader对象,还有createObjectURL,但是这一次恰好可以把这些都整合起来,一起说一下

var aBlob = new Blob( array, options );

jQuery单页全屏垂直滚动特效代码
jQuery单页全屏垂直滚动特效代码

非常实用的jQuery单页全屏垂直滚动特效代码,如今非常流行的特效代码,常用于产品功能介绍或者项目简介,此款jQuery插件滚动还是比较流畅,有些插件需要页面滚动到位才能切换页面,此特效还是比较流畅的。插件强大的自定义参数功能,支持手机端触屏以及支持切换的速度,值得学习使用。

下载

参数,array 是一个由ArrayBuffer, ArrayBufferView, Blob, DOMString 等对象构成的 Array ,或者其他类似对象的混合体,它将会被放进 Blob。DOMStrings会被编码为UTF-8。options不介绍了

Blob 对象表示一个不可变、原始数据的类文件对象。它的数据可以按文本或二进制的格式进行读取,也可以转换成 ReadableStream 来用于数据操作。

=> 这样说的话就是一段我们认识文本可以通过new Blod可以转化为Blod对象

问题Blod能够做什么??

那就要看哪些对象可以用他做搞一些事情

下载网页中某段文本或者日志

URL.createObjectURL() 她的参数就是Blod对象,用来创建一个url;可以结合a元素的download属性,实现一段日志或者文本的下载

  复制文本 
 function onCopyHandle() { // 创建隐藏的可***链接
    let content = `
    name: sunseekers
    role: student
    houseName: shanghai
    url: https://github.com/sunseekers
    userAgent: ${navigator.userAgent}
    log:'这里是日志内容'
    `.trim();

    let filename = 'logFiles.md'
    const eleLink = document.createElement('a');
    eleLink.download = filename;
    eleLink.style.display = 'none';

    const blob = new Blob([content]);
    eleLink.href = URL.createObjectURL(blob); // 字符内容转变成blob地址

    document.body.appendChild(eleLink);
    eleLink.click(); // 触发点击
    document.body.removeChild(eleLink); // 然后移除

    Message.success('日志下载成功')
  };复制代码

本地预览上传图片

图片可以用img标签显示也可以用canvas画,看需求


  

介绍前端的文件流flie

复制代码

又学到一个新的API=>FileReader

FileReader

写完发现

原来这些在之前的文章里面都有用过只是我没有想起来,或者被遗忘了,这又是一篇重复率很高的文章。当你对一个对象及他周边的属性属性的时候就可以做很多事了。完了做一次总结和回顾感觉很不一样,原来很多东西都是可以重复利用的,或者说在某一个基础之上做了扩展和升华,又能过做很多很有意义的事情了。与我而言又一次更加清晰的意识到这里前端与本地数据,流有关的知识点

今后可以继续扩展学习的知识点,这些都是与流有关的

MediaSource 对象

ReadableStream

Streams API

ArrayBuffer

相关免费学习推荐:javascript(视频)

相关专题

更多
Java 桌面应用开发(JavaFX 实战)
Java 桌面应用开发(JavaFX 实战)

本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。

37

2026.01.14

php与html混编教程大全
php与html混编教程大全

本专题整合了php和html混编相关教程,阅读专题下面的文章了解更多详细内容。

19

2026.01.13

PHP 高性能
PHP 高性能

本专题整合了PHP高性能相关教程大全,阅读专题下面的文章了解更多详细内容。

37

2026.01.13

MySQL数据库报错常见问题及解决方法大全
MySQL数据库报错常见问题及解决方法大全

本专题整合了MySQL数据库报错常见问题及解决方法,阅读专题下面的文章了解更多详细内容。

19

2026.01.13

PHP 文件上传
PHP 文件上传

本专题整合了PHP实现文件上传相关教程,阅读专题下面的文章了解更多详细内容。

16

2026.01.13

PHP缓存策略教程大全
PHP缓存策略教程大全

本专题整合了PHP缓存相关教程,阅读专题下面的文章了解更多详细内容。

6

2026.01.13

jQuery 正则表达式相关教程
jQuery 正则表达式相关教程

本专题整合了jQuery正则表达式相关教程大全,阅读专题下面的文章了解更多详细内容。

3

2026.01.13

交互式图表和动态图表教程汇总
交互式图表和动态图表教程汇总

本专题整合了交互式图表和动态图表的相关内容,阅读专题下面的文章了解更多详细内容。

45

2026.01.13

nginx配置文件详细教程
nginx配置文件详细教程

本专题整合了nginx配置文件相关教程详细汇总,阅读专题下面的文章了解更多详细内容。

9

2026.01.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
【web前端】Node.js快速入门
【web前端】Node.js快速入门

共16课时 | 2万人学习

开源物联网开发实例
开源物联网开发实例

共6课时 | 0.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号