前端的文件流flie是什么-创新互联

这篇文章主要介绍前端的文件流flie是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

10年积累的网站设计制作、做网站经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先做网站设计后付款的网站建设流程,更有安国免费网站建设让你可以放心的选择与我们合作。

背景

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

听到这个的时候我是懵逼的,我啥也不知道,但是我同事实现了,写了一个简单的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 );

参数,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

以上是前端的文件流flie是什么的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注创新互联行业资讯频道!

分享标题:前端的文件流flie是什么-创新互联
当前URL:https://www.cdcxhl.com/article16/escgg.html

成都网站建设公司_创新互联,为您提供外贸建站服务器托管电子商务小程序开发云服务器网站建设

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

成都网页设计公司