javascript栏目介绍前端的文件流flie。
背景
领导提出一个问题,能不能不借助端的能力,实现本地分段读取数据分段显示。在没有特别大的性能要求或者明确提出要求的情况下一般是一次性加载所有的数据并渲染,但是如果数据量大或者手机性能不好的话就会有别的问题了。
听到这个的时候我是懵逼的,我啥也不知道,但是我同事实现了,写了一个简单的demo
前端的实现
假设只上传一个文件
上传文件目前前端最常见的是借助 input 的 type='file'(还有DataTransfer和HTMLCanvasElement可以实现,不介绍了)File
文件上传成功之后就会返回一个FileList 对象(event.target.files[0]里面包含了所有与文本相关的信息,包括文本流,文本流我们可能肉眼不可见)
console.log('[FileList 对象]:',event.target.files[0])
- 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);复制代码
- 既然FileList 对象继承于Blod对象,Blod对象对象又有slice和text方法。所以之前的那个需求就很好实现了
具体实现我还么有写,思路到这里,日后补上
Blob
Blob/slice
File
Input/file
其他与流有关的API
我记得很早之前写过不借助端的力量实现本地上传预览图片音频文件,那个时候就有提到过用过Blod对象,FileReader对象,还有createObjectURL,但是这一次恰好可以把这些都整合起来,一起说一下
var aBlob = new Blob( array, options );
参数,array 是一个由ArrayBuffer, ArrayBufferView, Blob, DOMString 等对象构成的 Array ,或者其他类似对象的混合体,它将会被放进 Blob。DOMStrings会被编码为UTF-8。options不介绍了
Blob 对象表示一个不可变、原始数据的类文件对象。它的数据可以按文本或二进制的格式进行读取,也可以转换成 ReadableStream 来用于数据操作。
=> 这样说的话就是一段我们认识文本可以通过new Blod可以转化为Blod对象
问题Blod能够做什么??
那就要看哪些对象可以用他做搞一些事情
下载网页中某段文本或者日志
URL.createObjectURL() 她的参数就是Blod对象,用来创建一个url;可以结合a元素的download属性,实现一段日志或者文本的下载
<buttom onclick="onCopyHandle()">复制文本 </buttom> 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画,看需求
<body> <p class="index"> <input type="file" value="上传文件"> <img width="100" height="100"></img> </p> </body> <script> let inputEle = document.querySelector("input") let img = document.querySelector("img") inputEle.addEventListener('change', async function (event) { const fileDate = event.target.files[0] const fileReader = new FileReader() fileReader.readAsDataURL(fileDate) fileReader.onload = e => { img.src = e.target.result } }) </script>复制代码
又学到一个新的API=>FileReader
FileReader
写完发现
原来这些在之前的文章里面都有用过只是我没有想起来,或者被遗忘了,这又是一篇重复率很高的文章。当你对一个对象及他周边的属性属性的时候就可以做很多事了。完了做一次总结和回顾感觉很不一样,原来很多东西都是可以重复利用的,或者说在某一个基础之上做了扩展和升华,又能过做很多很有意义的事情了。与我而言又一次更加清晰的意识到这里前端与本地数据,流有关的知识点
今后可以继续扩展学习的知识点,这些都是与流有关的
MediaSource 对象
ReadableStream
Streams API
ArrayBuffer
相关免费学习推荐:javascript(视频)
以上是介绍前端的文件流flie的详细内容。更多信息请关注PHP中文网其他相关文章!

JavaScript在现实世界中的应用包括前端和后端开发。1)通过构建TODO列表应用展示前端应用,涉及DOM操作和事件处理。2)通过Node.js和Express构建RESTfulAPI展示后端应用。

JavaScript在Web开发中的主要用途包括客户端交互、表单验证和异步通信。1)通过DOM操作实现动态内容更新和用户交互;2)在用户提交数据前进行客户端验证,提高用户体验;3)通过AJAX技术实现与服务器的无刷新通信。

理解JavaScript引擎内部工作原理对开发者重要,因为它能帮助编写更高效的代码并理解性能瓶颈和优化策略。1)引擎的工作流程包括解析、编译和执行三个阶段;2)执行过程中,引擎会进行动态优化,如内联缓存和隐藏类;3)最佳实践包括避免全局变量、优化循环、使用const和let,以及避免过度使用闭包。

Python更适合初学者,学习曲线平缓,语法简洁;JavaScript适合前端开发,学习曲线较陡,语法灵活。1.Python语法直观,适用于数据科学和后端开发。2.JavaScript灵活,广泛用于前端和服务器端编程。

Python和JavaScript在社区、库和资源方面的对比各有优劣。1)Python社区友好,适合初学者,但前端开发资源不如JavaScript丰富。2)Python在数据科学和机器学习库方面强大,JavaScript则在前端开发库和框架上更胜一筹。3)两者的学习资源都丰富,但Python适合从官方文档开始,JavaScript则以MDNWebDocs为佳。选择应基于项目需求和个人兴趣。

从C/C 转向JavaScript需要适应动态类型、垃圾回收和异步编程等特点。1)C/C 是静态类型语言,需手动管理内存,而JavaScript是动态类型,垃圾回收自动处理。2)C/C 需编译成机器码,JavaScript则为解释型语言。3)JavaScript引入闭包、原型链和Promise等概念,增强了灵活性和异步编程能力。

不同JavaScript引擎在解析和执行JavaScript代码时,效果会有所不同,因为每个引擎的实现原理和优化策略各有差异。1.词法分析:将源码转换为词法单元。2.语法分析:生成抽象语法树。3.优化和编译:通过JIT编译器生成机器码。4.执行:运行机器码。V8引擎通过即时编译和隐藏类优化,SpiderMonkey使用类型推断系统,导致在相同代码上的性能表现不同。

JavaScript在现实世界中的应用包括服务器端编程、移动应用开发和物联网控制:1.通过Node.js实现服务器端编程,适用于高并发请求处理。2.通过ReactNative进行移动应用开发,支持跨平台部署。3.通过Johnny-Five库用于物联网设备控制,适用于硬件交互。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

SublimeText3 Linux新版
SublimeText3 Linux最新版

SublimeText3汉化版
中文版,非常好用

Atom编辑器mac版下载
最流行的的开源编辑器

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)