全国免费咨询:

13245491521

VR图标白色 VR图标黑色
X

中高端软件定制开发服务商

与我们取得联系

13245491521     13245491521

2024-10-26_不懂 File 和 Blob的差别在哪里?看这篇文章就够了

您的位置:首页 >> 新闻 >> 行业资讯

不懂 File 和 Blob的差别在哪里?看这篇文章就够了 点击关注公众号,“技术干货”及时达! 前言JavaScript 在处理文件、二进制数据和数据转换时,提供了一系列的 API 和对象,比如File、Blob、FileReader、ArrayBuffer、Base64、Object URL 和 DataURL。每个概念在不同场景中都有重要作用。下面的内容我们将会详细学习每个概念及其在实际应用中的用法。 接下来的内容中我们将来了解File和Blob这两个对象。 blob在 JavaScript 中,Blob(Binary Large Object)对象用于表示不可变的、原始的二进制数据。它可以用来存储文件、图片、音频、视频、甚至是纯文本等各种类型的数据。Blob 提供了一种高效的方式来操作数据文件,而不需要将数据全部加载到内存中,这在处理大型文件或二进制数据时非常有用。 我们可以使用 new Blob() 构造函数来创建一个 Blob 对象,语法如下: const blob = new Blob(blobParts, options);blobParts: 一个数组,包含将被放入 Blob 对象中的数据,可以是字符串、数组缓冲区(ArrayBuffer)、TypedArray、Blob 对象等。 options: 一个可选的对象,可以设置 type(MIME 类型)和 endings(用于表示换行符)。 例如: const blob = new Blob(["Hello, world!"], { type: "text/plain" }); Blob 对象主要有以下几个属性: size: 返回 Blob 对象的大小(以字节为单位)。console.log(blob.size); // 输出 Blob 的大小type: 返回 Blob 对象的 MIME 类型。console.log(blob.type); // 输出 Blob 的 MIME 类型Blob 对象提供了一些常用的方法来操作二进制数据。 slice([start], [end], [contentType])该方法用于从 Blob 中提取一部分数据,并返回一个新的 Blob 对象。参数 start 和 end 表示提取的字节范围,contentType 设置提取部分的 MIME 类型。 const blob = new Blob(["Hello, world!"], { type: "text/plain" }); const partialBlob = blob.slice(0, 5);text()该方法将 Blob 的内容读取为文本字符串。它返回一个 Promise,解析为文本数据。 blob.text().then((text) = { console.log(text); // 输出 "Hello, world!"}); arrayBuffer()该方法将 Blob 的内容读取为 ArrayBuffer 对象,适合处理二进制数据。它返回一个 Promise,解析为 ArrayBuffer 数据。 const blob = new Blob(["Hello, world!"], { type: "text/plain" }); blob.arrayBuffer().then((buffer) = { console.log(buffer);}); stream()该方法将 Blob 的数据作为一个 ReadableStream 返回,允许你以流的方式处理数据,适合处理大文件。 const stream = blob.stream();Blob 的使用场景Blob 对象在很多场景中非常有用,尤其是在 Web 应用中处理文件、图片或视频等二进制数据时。以下是一些常见的使用场景: 生成文件下载你可以通过 Blob 创建文件并生成下载链接供用户下载文件。 const blob = new Blob(["This is a test file."], { type: "text/plain" });const url = URL.createObjectURL(blob); // 创建一个 Blob URLconst a = document.createElement("a");a.href = url;a.download = "test.txt";a.click();URL.revokeObjectURL(url); // 释放 URL 对象当我们刷新浏览器的时候发现是可以自动给我们下载图片了: 上传文件你可以通过 FormData 对象将 Blob 作为文件上传到服务器: const formData = new FormData();formData.append("file", blob, "example.txt"); fetch("/upload", { method: "POST", body: formData,}).then((response) = { console.log("File uploaded successfully");});读取图片或其他文件通过 FileReader API 可以将 Blob 对象读取为不同的数据格式。举例来说,你可以将 Blob 读取为图片并显示在页面上: !DOCTYPE htmlhtml lang="en" head meta charset="UTF-8" / meta name="viewport" content="width=device-width, initial-scale=1.0" / titleDocument/title /head body input type="file" id="fileInput" accept="image/*" / div id="imageContainer"/div script const fileInput = document.getElementById("fileInput"); const imageContainer = document.getElementById("imageContainer"); fileInput.addEventListener("change", function (event) { const file = event.target.files[0]; if (file && file.type.startsWith("image/")) { const reader = new FileReader(); reader.onload = function (e) { const img = document.createElement("img"); img.src = e.target.result; img.style.maxWidth = "500px"; img.style.margin = "10px"; imageContainer.innerHTML = ""; imageContainer.appendChild(img); }; reader.readAsDataURL(file); } else { alert("请选择一个有效的图片文件。"); } }); /script /body/html Blob 和 Base64有时你可能需要将 Blob 转换为 Base64 编码的数据(例如用于图像的内联显示或传输)。可以通过 FileReader 来实现: const reader = new FileReader();reader.onloadend = function () { const base64data = reader.result; console.log(base64data); // 输出 base64 编码的数据}; reader.readAsDataURL(blob); // 将 Blob 读取为 base64 FileFile 是 JavaScript 中代表文件的数据结构,它继承自 Blob 对象,包含文件的元数据(如文件名、文件大小、类型等)。File 对象通常由用户通过input type="file"选择文件时创建,也可以使用 JavaScript 构造函数手动创建。 input type="file" id="fileInput" /script document.getElementById("fileInput").addEventListener("change", (event) = { const file = event.target.files[0]; console.log("文件名:", file.name); console.log("文件类型:", file.type); console.log("文件大小:", file.size); });/script最终输出结果如下图所示: 我们可以使用 File 的方式来访问用户上传的文件,我们也可以手动创建 File 对象: const file = new File(["Hello, world!"], "hello-world.txt", { type: "text/plain",}); console.log(file); File 对象继承了 Blob 对象的方法,因此可以使用一些 Blob 对象的方法来处理文件数据。 slice(): 从文件中获取一个子部分数据,返回一个新的 Blob 对象。const blob = file.slice(0, 1024); // 获取文件的前 1024 个字节text(): 读取文件内容,并将其作为文本返回(这是 Blob 的方法,但可以用于 File 对象)。file.text().then((text) = { console.log(text); // 输出文件的文本内容});arrayBuffer(): 将文件内容读取为 ArrayBuffer(用于处理二进制数据)。file.arrayBuffer().then((buffer) = { console.log(buffer); // 输出文件的 ArrayBuffer});stream(): 返回一个 ReadableStream 对象,可以通过流式读取文件内容。const stream = file.stream(); 总结Blob 是纯粹的二进制数据,它可以存储任何类型的数据,但不具有文件的元数据(如文件名、最后修改时间等)。 File 是 Blob 的子类,File 对象除了具有 Blob 的所有属性和方法之外,还包含文件的元数据,如文件名和修改日期。 你可以将 File 对象看作是带有文件信息的 Blob。 const file = new File(["Hello, world!"], "hello.txt", { type: "text/plain" }); console.log(file instanceof Blob); // true二者在文件上传和二进制数据处理的场景中被广泛使用。Blob 更加通用,而 File 更专注于与文件系统的交互。 点击关注公众号,“技术干货”及时达!

上一篇:2021-06-21_14篇论文入选CVPR!快手视觉研究成果精华总结 下一篇:2025-02-18_DeepSeek:我是一面万花镜,而你是持镜人

TAG标签:

18
网站开发网络凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设网站改版域名注册主机空间手机网站建设网站备案等方面的需求...
请立即点击咨询我们或拨打咨询热线:13245491521 13245491521 ,我们会详细为你一一解答你心中的疑难。
项目经理在线

相关阅读 更多>>

猜您喜欢更多>>

我们已经准备好了,你呢?
2022我们与您携手共赢,为您的企业营销保驾护航!

不达标就退款

高性价比建站

免费网站代备案

1对1原创设计服务

7×24小时售后支持

 

全国免费咨询:

13245491521

业务咨询:13245491521 / 13245491521

节假值班:13245491521()

联系地址:

Copyright © 2019-2025      ICP备案:沪ICP备19027192号-6 法律顾问:律师XXX支持

在线
客服

技术在线服务时间:9:00-20:00

在网站开发,您对接的直接是技术员,而非客服传话!

电话
咨询

13245491521
7*24小时客服热线

13245491521
项目经理手机

微信
咨询

加微信获取报价