Javascript File和Blob詳解
File()
File()?構(gòu)造器創(chuàng)建新的 File 對(duì)象實(shí)例。
語(yǔ)法
var myFile = new File(bits, name[, options]);
參數(shù)
bits
一個(gè)包含ArrayBuffer
,ArrayBufferView
,Blob
,或者 DOMString
對(duì)象的 Array — 或者任何這些對(duì)象的組合。這是 UTF-8 編碼的文件內(nèi)容。
name
USVString
,表示文件名稱,或者文件路徑。
options 可選
選項(xiàng)對(duì)象,包含文件的可選屬性??捎玫倪x項(xiàng)如下:
type
: DOMString,表示將要放到文件中的內(nèi)容的 MIME 類型。默認(rèn)值為 “” 。lastModified
: 數(shù)值,表示文件最后修改時(shí)間的 Unix 時(shí)間戳(毫秒)。默認(rèn)值為?Date.now()。
示例
var file = new File(["my name"], "infoTxt", { type: "text/plain", });
Blob()
Blob?對(duì)象表示一個(gè)不可變、原始數(shù)據(jù)的類文件對(duì)象。它的數(shù)據(jù)可以按文本或二進(jìn)制的格式進(jìn)行讀取,也可以轉(zhuǎn)換成 ReadableStream 來(lái)用于數(shù)據(jù)操作。
Blob 表示的不一定是JavaScript原生格式的數(shù)據(jù)。File?接口基于Blob,繼承了 blob 的功能并將其擴(kuò)展使其支持用戶系統(tǒng)上的文件,同時(shí)?Blob?對(duì)象的API也被列在 File 接口中。
要從其他非blob對(duì)象和數(shù)據(jù)構(gòu)造一個(gè) Blob,請(qǐng)使用?Blob()?構(gòu)造函數(shù)。要?jiǎng)?chuàng)建一個(gè) blob 數(shù)據(jù)的子集 blob,請(qǐng)使用?slice()?方法。要獲取用戶文件系統(tǒng)上的文件對(duì)應(yīng)的?Blob?對(duì)象,請(qǐng)參閱 File 文檔。
語(yǔ)法
var aBlob = new Blob( array, options );
返回一個(gè)新創(chuàng)建的 Blob 對(duì)象,其內(nèi)容由參數(shù)中給定的數(shù)組串聯(lián)組成。
參數(shù)
- array 是一個(gè)由
ArrayBuffer
,?ArrayBufferView
,?Blob
,?DOMString
?等對(duì)象構(gòu)成的?Array?,或者其他類似對(duì)象的混合體,它將會(huì)被放進(jìn)?Blob。DOMStrings會(huì)被編碼為UTF-8。 - options 是一個(gè)可選的BlobPropertyBag字典,它可能會(huì)指定如下兩個(gè)屬性:
- type,默認(rèn)值為 “”,它代表了將會(huì)被放入到blob中的數(shù)組內(nèi)容的MIME類型。
- endings,默認(rèn)值為"transparent",用于指定包含行結(jié)束符\n的字符串如何被寫入。 它是以下兩個(gè)值中的一個(gè): “native”,代表行結(jié)束符會(huì)被更改為適合宿主操作系統(tǒng)文件系統(tǒng)的換行符,或者 “transparent”,代表會(huì)保持blob中保存的結(jié)束符不變
屬性
Blob.size?只讀
Blob 對(duì)象中所包含數(shù)據(jù)的大小(字節(jié))。
Blob.type?只讀
一個(gè)字符串,表明該 Blob 對(duì)象所包含數(shù)據(jù)的 MIME 類型。如果類型未知,則該值為空字符串。
方法
Blob.slice([start[, end[, contentType]]])
返回一個(gè)新的 Blob 對(duì)象,包含了源 Blob 對(duì)象中指定范圍內(nèi)的數(shù)據(jù)。
Blob.stream()
返回一個(gè)能讀取blob內(nèi)容的 ReadableStream
。
Blob.text()
返回一個(gè)promise且包含blob所有內(nèi)容的UTF-8格式的 USVString
。
Blob.arrayBuffer()
返回一個(gè)promise且包含blob所有內(nèi)容的二進(jìn)制格式的 ArrayBuffer
示例
const aFileParts = ['<a id="a"><b id="b">hey!</b></a>']; // 一個(gè)包含DOMString的數(shù)組 const oMyBlob = new Blob(aFileParts, {type : 'text/html'}); // 得到 blob oMyBlob.size // 32 oMyBlob.type // 'text/html'
Blob()?構(gòu)造函數(shù)允許通過(guò)其它對(duì)象創(chuàng)建 Blob 對(duì)象。比如,用字符串構(gòu)建一個(gè) blob:
var debug = {hello: "world"}; var blob = new Blob([JSON.stringify(debug, null, 2)], {type : 'application/json'});
使用 Blob 創(chuàng)建一個(gè)指向類型化數(shù)組的URL
const imgBlob = fetchedImgData(); // 通過(guò)接口返回的圖片資源,設(shè)置返回的responseType為blob const blob = new Blob([imgBlob], {type: 'image/png' }); // 傳入一個(gè)合適的 MIME 類型 const url = URL.createObjectURL(blob); // 會(huì)產(chǎn)生一個(gè)類似 blob:d3958f5c-0777-0845-9dcf-2cb28783acaf 這樣的URL字符串 // 你可以像使用普通 URL 那樣使用它,比如用在 img.src 上。
從 Blob 中提取數(shù)據(jù)
一種從Blob中讀取內(nèi)容的方法是使用 FileReader。以下代碼將 Blob 的內(nèi)容作為類型數(shù)組讀?。?/p>
const reader = new FileReader(); reader.readAsArrayBuffer(blob); reader.addEventListener("load ", function(readRes) { // readRes.target.result 轉(zhuǎn)化為arrayBuffer的 blob });
另一種讀取Blob中內(nèi)容的方式是使用Response對(duì)象。下述代碼將Blob中的內(nèi)容讀取為文本:
var text = await new Response(blob).text();
通過(guò)使用 FileReader 的其它方法可以把 Blob 讀取為字符串或者數(shù)據(jù)URL。
總結(jié)
本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
微信小程序?qū)崿F(xiàn)可拖動(dòng)懸浮圖標(biāo)(包括按鈕角標(biāo)的實(shí)現(xiàn))
這篇文章主要介紹了微信小程序?qū)崿F(xiàn)可拖動(dòng)懸浮圖標(biāo)(包括按鈕角標(biāo)的實(shí)現(xiàn)),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12JS實(shí)現(xiàn)上傳圖片的三種方法并實(shí)現(xiàn)預(yù)覽圖片功能
在用戶注冊(cè)頁(yè)面,需要用戶在本地選擇一張圖片作為頭像,并同時(shí)預(yù)覽,實(shí)現(xiàn)思路有兩種,具體實(shí)現(xiàn)方法和實(shí)例代碼大家參考下本文2017-07-07JavaScript中concat復(fù)制數(shù)組方法淺析
在本篇文章里小編給大家總結(jié)了關(guān)于JavaScript中concat復(fù)制數(shù)組方法知識(shí)點(diǎn),有需要的朋友們可以學(xué)習(xí)下。2019-01-01js 鼠標(biāo)移動(dòng)顯示圖片的簡(jiǎn)單實(shí)例
本篇文章主要是對(duì)js鼠標(biāo)移動(dòng)顯示圖片的簡(jiǎn)單實(shí)例進(jìn)行了介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2013-12-12微信登錄過(guò)程、openId、token詳解(代碼實(shí)現(xiàn))
這篇文章主要介紹了微信登錄過(guò)程、openId、token詳解,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-08-08js將json格式的對(duì)象拼接成復(fù)雜的url參數(shù)方法
下面小編就為大家?guī)?lái)一篇js將json格式的對(duì)象拼接成復(fù)雜的url參數(shù)方法。小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-05-05js Canvas實(shí)現(xiàn)的日歷時(shí)鐘案例分享
本文主要分享了js實(shí)現(xiàn)的日歷時(shí)鐘案例,具有一定的參考價(jià)值,下面跟著小編一起來(lái)看下吧2016-12-12微信小程序?qū)崿F(xiàn)swiper切換卡內(nèi)嵌滾動(dòng)條不顯示的方法示例
這篇文章主要介紹了微信小程序?qū)崿F(xiàn)swiper切換卡內(nèi)嵌滾動(dòng)條不顯示的方法,涉及微信小程序swiper選項(xiàng)卡組件相關(guān)操作技巧,需要的朋友可以參考下2018-12-12JavaScript操作元素教你改變頁(yè)面內(nèi)容樣式
這篇文章主要為大家介紹了JavaScript操作元素,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2021-11-11