JS File 和 Blob 是什么
File / Blob 是什么
Blob
是最原始的文件对象,File
是基于 Blob
改造的,因此 Blob
的属性/方法在 File
中同样可以使用,你可以理解为 File === Blob,像 input
选择文件后会返回的文件信息就是属于 File
怎么操作 File / Blob
JS 提供的 FileReader
、URL.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
生成的base64
和url
并不是持久化,它们只是存在内存中,当你关闭文档后会自动从内存中删掉,因此你不可以将它们放到localStore
或服务器中。
参考
https://developer.mozilla.org/zh-CN/docs/Web/API/Blob
JS File 和 Blob 是什么相关推荐
- html5 文件转byte[],JS 文件base64、File、Blob、ArrayBuffer互转
二进制互转 1. file对象转base64let reader = new FileReader(); reader.readAsDataURL(file[0]) console.log(reade ...
- js二进制流转Blob对象。Blob对象再转File对象
JavaScript 二进制转文件 使用js将blob对象转file对象 前端处理后端返回的二进制流文件 js中Blob对象一般用法 js中关于Blob对象的介绍与使用 上传的文件对象 完整代码实例 ...
- js图片格式转换(File、blob、二进制)
一.首先知道你要转换的编码格式: log一下就能看到: Blob: 二进制 File 二.File转Blob // 原生 <input class="ut myHide" i ...
- js中关于Blob对象的介绍与使用
js中关于Blob对象的介绍与使用 blob对象介绍 一个 Blob对象表示一个不可变的, 原始数据的类似文件对象.Blob表示的数据不一定是一个JavaScript原生格式 blob对象本质上是js ...
- Tomcat 是怎么处理js file access request的
Sent: Tuesday, November 25, 2014 12:08 PM Tomcat 运行起来之后,通过这个url就能访问js文件: http://localhost:8080/cus.c ...
- [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 ...
- JS file图片即选即得显示,前端交互图片即选即得
<table><tr><td><input type="file" name="sdfFile" id="s ...
- Blob如何在html里转换成图片,前端图片canvas,file,blob,DataURL等格式转换
前端图片canvas,file,blob,DataURL等格式转换最近用到一些图片相关的操作,记录一下笔记. 将file转化成base64 场景: 获取到一个file类型的图片,如果直接在html中预 ...
- 图片格式转换(File、Blob、base64)
前言 记录一下比较常见的图片格式(File.Blob.base64)在不同的场景他们之间的相互转换的方法. 一.类型简介 Blob BLOB(binary large object): 二进制大对象, ...
最新文章
- HDU1808(抽屉原理)
- Python使用matplotlib函数subplot可视化多个不同颜色的折线图、使用set_major_locator函数指定坐标轴主刻度数值倍数(MultipleLocator)
- 重新标注128万张ImageNet图片:多标签,全面提升模型性能
- linux 下常见启动文件配置
- Android 四大组件之——Acitivity(二) 启动模式
- 210506阶段四Python基本语法
- Bzoj 2127 happiness 最小割
- 虚拟化之vmware-vsphere (web) client
- 超级终端软件测试工程师,超级终端是否可用来测试 RS485?
- 年会尽头是闲鱼!超11万人在闲鱼转卖年会奖品
- 读书笔记:高等代数 上册
- emu8086:汇编语言复制数组案例
- 考研二战日记——第二天 高数第一章第二节:数列的极限
- 查看npy文件中存的是什么
- 罗翔老师转谈记录,不同认知出发//心之所向,素履以往,生如逆旅,一苇以航。
- 一个Web前端实习生的简历
- 从嗤之以鼻到“奇迹” 前淘宝工程师详解12306技术
- 强制推广鸿蒙系统,鸿蒙系统凭实力占市场,无需通过禁止安卓系统来推广
- python快速实现简易超级玛丽小游戏
- PDF Expert教程|七个提高效率的小技巧
热门文章
- java 采用MD5加密解密代码示例(不玩套路, 非标题党, 附带解密代码)
- Adobe BrowserLab开放注册并发布升级
- 论文翻译:Anytime Stereo Image Depth Estimation on Mobile Devices
- HUAWEI WeAutomate RPA初级教程之PPT自动化
- zzuli OJ 2332:小新同学找女朋友
- CS(反恐精英)奥林匹克运动会
- 苹果手机密码设置在哪里_sim卡密码设置在哪里-sim卡密码设置介绍
- AnnotationConfigApplicationContext@xxxx has not been refreshed yet
- 读取股票数据存储到本地MySQL数据库(三)
- 三种显色方法ECL、NBT/BCIP和DAB的对比