File / Blob 是什么

Blob 是最原始的文件对象,File 是基于 Blob 改造的,因此 Blob 的属性/方法在 File 中同样可以使用,你可以理解为 File === Blob,像 input 选择文件后会返回的文件信息就是属于 File

怎么操作 File / Blob

JS 提供的 FileReaderURL.createObjectURL() 都可以处理 File / Blob

FileReader

FileReader 可以用来读取 File / Blob , input 选择上传文件时比如是一张图片 File ,那么我们可以传递这个 File 到 FileReader 提供相关的 API 来转成对应的数据

  • FileReader APi

    • reader.readAsDataURL(file || blob) 转成 base64
    • reader.readAsArrayBuffer(file || blob) 转成缓冲数组
    • reader.readAsText(file || blob) 转成文本
    • reader.readAsBinaryString(file || blob) 转成字节

我们来看看 demo

<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><title></title>
</head>
<body><input type="file" onchange="onChange(event)" /><script type="text/javascript">// 文件上传后的回调function onChange(event) {// 接受 input 传递过来的 File,这里返回的数组,我们取第一个就好。const file = event.target.files[0]// 开始利用 FileReader 操控 Fileconst reader = new FileReader()// 开始转成 base64reader.readAsDataURL(file)// 转成base64 后 可通过 onload 来获取reader.onload = (res) => {console.log(res.target.result) // base64}}</script>
</body>
</html>

控制台打印出 base64

拿到 base64 后就可以做你想做的事情了,比如放到 img.src 或粘贴到浏览器访问

URL.createObjectURL()

URL.createObjectURL() 可以将 File / Blob 转成一个 url 访问链接,
格式类似为:blob:wer3-werwr3-wer-qweq5-eedee 这样的字符串,你可以放到 img.src 或粘贴到浏览器访问,我们来看看 demo

<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><title></title><style type="text/css"></style>
</head>
<body><input type="file" onchange="onChange(event)" /><script type="text/javascript">// 文件上传后的回调function onChange(event) {// 接受 Fileconst file = event.target.files[0]// 生成 urlconsole.log(URL.createObjectURL(file))}</script>
</body>
</html>

base64 和 blob:url 应用场景

  • base64 通常用于图片展示、图片预览
  • blob: url 通常用于分块上传、点击链接文件下载、生成 pdf 等、

手动创建 Blob

由于选择 input 文件会自动返回 File,这里就以创建 Blob 为例,
我们可以将对象数据放到 Blob 里面然后生成 blob:url || base64 || 文本数据
我们来看下 demo


const obj = {name: 'Jack'}
// 将数据放到 blob
const blob = new Blob([JSON.stringify(obj , null, 2)], {type : 'application/json'});// 转成 base64
const reader = new FileReader()
reader.readAsDataURL(blob)
reader.onload = (res) => {console.log(res.target.result)
}// 转成 url
console.log(URL.createObjectURL(blob))// 直接读取文本(创建 blob 会返回一个 promise ,所以我们可以用 await 来获取)
console.log(await blob.text())

如图:

好了,内容就到这里,相信你已经对 FIle / Blob 基本概念有所了解。

Note
生成的 base64url 并不是持久化,它们只是存在内存中,当你关闭文档后会自动从内存中删掉,因此你不可以将它们放到 localStore 或服务器中。

参考

https://developer.mozilla.org/zh-CN/docs/Web/API/Blob

JS File 和 Blob 是什么相关推荐

  1. html5 文件转byte[],JS 文件base64、File、Blob、ArrayBuffer互转

    二进制互转 1. file对象转base64let reader = new FileReader(); reader.readAsDataURL(file[0]) console.log(reade ...

  2. js二进制流转Blob对象。Blob对象再转File对象

    JavaScript 二进制转文件 使用js将blob对象转file对象 前端处理后端返回的二进制流文件 js中Blob对象一般用法 js中关于Blob对象的介绍与使用 上传的文件对象 完整代码实例 ...

  3. js图片格式转换(File、blob、二进制)

    一.首先知道你要转换的编码格式: log一下就能看到: Blob: 二进制 File 二.File转Blob // 原生 <input class="ut myHide" i ...

  4. js中关于Blob对象的介绍与使用

    js中关于Blob对象的介绍与使用 blob对象介绍 一个 Blob对象表示一个不可变的, 原始数据的类似文件对象.Blob表示的数据不一定是一个JavaScript原生格式 blob对象本质上是js ...

  5. Tomcat 是怎么处理js file access request的

    Sent: Tuesday, November 25, 2014 12:08 PM Tomcat 运行起来之后,通过这个url就能访问js文件: http://localhost:8080/cus.c ...

  6. [Drupal] How to add the js file and js code block in Drupal

    Drupal 6: 代码   // This will add a JS file to your head (specifically the $scripts variable in page.t ...

  7. JS file图片即选即得显示,前端交互图片即选即得

    <table><tr><td><input type="file" name="sdfFile" id="s ...

  8. Blob如何在html里转换成图片,前端图片canvas,file,blob,DataURL等格式转换

    前端图片canvas,file,blob,DataURL等格式转换最近用到一些图片相关的操作,记录一下笔记. 将file转化成base64 场景: 获取到一个file类型的图片,如果直接在html中预 ...

  9. 图片格式转换(File、Blob、base64)

    前言 记录一下比较常见的图片格式(File.Blob.base64)在不同的场景他们之间的相互转换的方法. 一.类型简介 Blob BLOB(binary large object): 二进制大对象, ...

最新文章

  1. HDU1808(抽屉原理)
  2. Python使用matplotlib函数subplot可视化多个不同颜色的折线图、使用set_major_locator函数指定坐标轴主刻度数值倍数(MultipleLocator)
  3. 重新标注128万张ImageNet图片:多标签,全面提升模型性能
  4. linux 下常见启动文件配置
  5. Android 四大组件之——Acitivity(二) 启动模式
  6. 210506阶段四Python基本语法
  7. Bzoj 2127 happiness 最小割
  8. 虚拟化之vmware-vsphere (web) client
  9. 超级终端软件测试工程师,超级终端是否可用来测试 RS485?
  10. 年会尽头是闲鱼!超11万人在闲鱼转卖年会奖品
  11. 读书笔记:高等代数 上册
  12. emu8086:汇编语言复制数组案例
  13. 考研二战日记——第二天 高数第一章第二节:数列的极限
  14. 查看npy文件中存的是什么
  15. 罗翔老师转谈记录,不同认知出发//心之所向,素履以往,生如逆旅,一苇以航。
  16. 一个Web前端实习生的简历
  17. 从嗤之以鼻到“奇迹” 前淘宝工程师详解12306技术
  18. 强制推广鸿蒙系统,鸿蒙系统凭实力占市场,无需通过禁止安卓系统来推广
  19. python快速实现简易超级玛丽小游戏
  20. PDF Expert教程|七个提高效率的小技巧

热门文章

  1. java 采用MD5加密解密代码示例(不玩套路, 非标题党, 附带解密代码)
  2. Adobe BrowserLab开放注册并发布升级
  3. 论文翻译:Anytime Stereo Image Depth Estimation on Mobile Devices
  4. HUAWEI WeAutomate RPA初级教程之PPT自动化
  5. zzuli OJ 2332:小新同学找女朋友
  6. CS(反恐精英)奥林匹克运动会
  7. 苹果手机密码设置在哪里_sim卡密码设置在哪里-sim卡密码设置介绍
  8. AnnotationConfigApplicationContext@xxxx has not been refreshed yet
  9. 读取股票数据存储到本地MySQL数据库(三)
  10. 三种显色方法ECL、NBT/BCIP和DAB的对比