JavaScript中blob對(duì)象和file對(duì)象的區(qū)別及相互轉(zhuǎn)換實(shí)例
前言
在 JavaScript 中,Blob 對(duì)象和 File 對(duì)象都代表二進(jìn)制數(shù)據(jù),且它們有很多相似之處,但也有一些關(guān)鍵的區(qū)別。以下是它們的主要對(duì)比:
1. Blob 對(duì)象:
Blob是一種表示不可變的原始數(shù)據(jù)的類,可以是任意類型的二進(jìn)制數(shù)據(jù)。- 它通常用于處理文件或其他原始數(shù)據(jù)類型,比如圖片、音頻、視頻等。
Blob可以由多個(gè)部分組成,也就是說(shuō),它可以是一個(gè)二進(jìn)制數(shù)據(jù)的集合。
創(chuàng)建 Blob 示例:
const blob = new Blob(["Hello, world!"], { type: "text/plain" });主要特征:
Blob對(duì)象是一個(gè)通用的二進(jìn)制數(shù)據(jù)容器。- 它沒(méi)有與文件相關(guān)的元數(shù)據(jù)(如文件名、文件路徑等)。
Blob主要用于處理大數(shù)據(jù),如從服務(wù)器獲取的二進(jìn)制數(shù)據(jù)流。
2. File 對(duì)象:
File繼承自Blob,是Blob的一個(gè)子類,代表的是用戶的文件。File對(duì)象除了包含與Blob相同的二進(jìn)制數(shù)據(jù)外,還包含一些額外的屬性,比如文件名和文件路徑等。- 通常,
File對(duì)象是通過(guò)文件選擇器(<input type="file">)或拖放操作從用戶系統(tǒng)中獲取的。
創(chuàng)建 File 示例:
const file = new File(["Hello, world!"], "hello.txt", { type: "text/plain" });主要特征:
File是專門設(shè)計(jì)來(lái)表示用戶文件的,具有額外的文件相關(guān)信息,如name(文件名)和lastModified(最后修改時(shí)間)。- 它通常用在與文件操作相關(guān)的場(chǎng)景,例如文件上傳、下載等。
File實(shí)際上是一個(gè)Blob,因此你可以使用Blob上的方法(如slice)在File對(duì)象上進(jìn)行操作。
關(guān)鍵區(qū)別:
| 特性 | Blob | File |
|---|---|---|
| 繼承關(guān)系 | Blob 是基礎(chǔ)類 | File 是 Blob 的子類 |
| 額外元數(shù)據(jù) | 沒(méi)有 | 有:如文件名 name 和 lastModified |
| 使用場(chǎng)景 | 用于處理任意的二進(jìn)制數(shù)據(jù) | 用于表示文件,通常來(lái)自用戶文件選擇 |
| 創(chuàng)建方式 | 可以通過(guò)代碼直接創(chuàng)建 | 通常通過(guò)文件選擇器或拖放獲取 |
總結(jié):
Blob是一個(gè)通用的二進(jìn)制數(shù)據(jù)容器,不包含文件的元數(shù)據(jù);而File是Blob的擴(kuò)展,代表著帶有元數(shù)據(jù)的文件,通常與文件操作相關(guān)。
兩個(gè)對(duì)象進(jìn)行相互轉(zhuǎn)換
從 Blob 轉(zhuǎn)換為 File
可以通過(guò)構(gòu)造 File 對(duì)象的方式將 Blob 轉(zhuǎn)換為 File。File 構(gòu)造函數(shù)接受三個(gè)參數(shù):文件內(nèi)容(通常是一個(gè) Blob),文件名和可選的選項(xiàng)對(duì)象(比如文件類型)。
const blob = new Blob(["Hello, world!"], { type: "text/plain" });
// 將 Blob 轉(zhuǎn)換為 File
const file = new File([blob], "hello.txt", { type: "text/plain" });
console.log(file); // File 對(duì)象,包含文件內(nèi)容、文件名等信息j
從 File 轉(zhuǎn)換為 Blob
因?yàn)?nbsp;File 本質(zhì)上是繼承自 Blob,所以可以直接將 File 對(duì)象當(dāng)作 Blob 對(duì)象使用。轉(zhuǎn)換過(guò)程實(shí)際上不需要做任何特別的操作。如果你想獲取 File 中的 Blob 數(shù)據(jù),可以直接引用 File 對(duì)象本身,或者使用 File.slice() 方法創(chuàng)建一個(gè)新的 Blob。
const file = new File(["Hello, world!"], "hello.txt", { type: "text/plain" });
// File 本身就是一個(gè) Blob,可以直接使用
const blob = file;
// 或者使用 slice 方法創(chuàng)建一個(gè)新的 Blob
const newBlob = file.slice(0, file.size);
console.log(blob); // Blob 對(duì)象,包含文件的二進(jìn)制數(shù)據(jù)
console.log(newBlob); // 新的 Blob 對(duì)象總結(jié):
- 從
Blob轉(zhuǎn)換為File需要通過(guò)File構(gòu)造函數(shù),將Blob對(duì)象作為數(shù)據(jù)部分傳入。 - 從
File轉(zhuǎn)換為Blob可以直接使用File對(duì)象本身,因?yàn)?nbsp;File本質(zhì)上是Blob的一個(gè)子類。如果需要?jiǎng)?chuàng)建新的Blob,可以使用File.slice()方法。
相關(guān)文章
javascript設(shè)計(jì)模式 封裝和信息隱藏(上)
今天博文關(guān)注的是javascript中的封裝,文章內(nèi)容來(lái)自《pro javascript design patterns》(有興趣的朋友可以直接去下)和自己對(duì)這一問(wèn)題的理解2012-07-07
layui 實(shí)現(xiàn)表單和文件上傳一起傳到后臺(tái)的例子
今天小編就為大家分享一篇layui 實(shí)現(xiàn)表單和文件上傳一起傳到后臺(tái)的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-09-09
10種JavaScript最常見的錯(cuò)誤(小結(jié))
這篇文章主要介紹了10種JavaScript最常見的錯(cuò)誤(小結(jié)),查看了數(shù)千個(gè)項(xiàng)目后,發(fā)現(xiàn)了 10 個(gè)最常見的 JavaScript 錯(cuò)誤。我們會(huì)告訴你什么原因?qū)е铝诉@些錯(cuò)誤,以及如何防止這些錯(cuò)誤發(fā)生2019-06-06
JavaScript逆向分析instagram登入過(guò)程
這篇文章主要介紹了JavaScript逆向分析instagram登入過(guò)程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07
JavaScript 手動(dòng)實(shí)現(xiàn)instanceof的方法
instanceof運(yùn)算符用于檢測(cè)構(gòu)造函數(shù)的prototype屬性是否出現(xiàn)在某個(gè)實(shí)例對(duì)象的原型鏈上,本文重點(diǎn)給大家介紹JavaScript手動(dòng)實(shí)現(xiàn)instanceof的問(wèn)題,感興趣的朋友跟隨小編一起看看吧2021-10-10
有道JavaScript監(jiān)聽瀏覽器的問(wèn)題
相信大家在web項(xiàng)目中,經(jīng)常會(huì)用到j(luò)avascript的事件監(jiān)聽、事件冒泡這些東西。當(dāng)然也包括window.opener,window.showModalDialog這些父子窗口的互操作。2010-06-06
微信小程序開發(fā)之a(chǎn)nimation循環(huán)動(dòng)畫實(shí)現(xiàn)的讓云朵飄效果
這篇文章主要介紹了微信小程序開發(fā)之a(chǎn)nimation循環(huán)動(dòng)畫實(shí)現(xiàn)的讓云朵飄效果,結(jié)合實(shí)例形式分析了animation結(jié)合js時(shí)間函數(shù)實(shí)現(xiàn)循環(huán)動(dòng)畫效果的具體步驟與相關(guān)操作技巧,需要的朋友可以參考下2017-07-07
JS中的算法與數(shù)據(jù)結(jié)構(gòu)之隊(duì)列(Queue)實(shí)例詳解
這篇文章主要介紹了JS中的算法與數(shù)據(jù)結(jié)構(gòu)之隊(duì)列(Queue),結(jié)合實(shí)例形式詳細(xì)分析了javascript中隊(duì)列的概念、原理、定義及常見操作技巧,需要的朋友可以參考下2019-08-08

