<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在js中有很多二進位制資料,有file,base64,Blob,ArrayBuffer,FileReader。這些二進位制資料在檔案匯出和下載的時候是經常會用到的,我們這篇文章就是介紹這些二進位制資料以及它們之間的轉化。
檔案(File)介面提供有關檔案的資訊,並允許網頁中的 JavaScript 存取其內容。實際上,File 物件是特殊型別的 Blob,且可以用在任意的 Blob 型別的 context 中。Blob 的屬性和方法都可以用於 File 物件。
file檔案一般有兩種來源
<input>
元素上選擇檔案後返回的 FileList 物件;DataTransfer
物件;每個 File
物件都包含以下屬性,這些屬性都繼承自 Blob 物件:
lastModified
:參照檔案最後修改日期,為自1970年1月1日0:00以來的毫秒數;lastModifiedDate
:參照檔案的最後修改日期;name
:參照檔案的檔名;size
:參照檔案的檔案大小;type
:檔案的媒體型別(MIME);webkitRelativePath
:檔案的路徑或 URL。Base64 是一種基於64個可列印字元來表示二進位制資料的表示方法。Base64 編碼普遍應用於需要通過被設計為處理文字資料的媒介上儲存和傳輸二進位制資料而需要編碼該二進位制資料的場景。這樣是為了保證資料的完整並且不用在傳輸過程中修改這些資料。
Blob 物件表示一個不可變、原始資料的類檔案物件。它的資料可以按文字或二進位制的格式進行讀取,也可以轉換成 ReadableStream 來用於資料操作。
也就是說blob物件是原始二進位制資料物件,是不可修改的。
new Blob(array, options);
array
:由 ArrayBuffer
、ArrayBufferView
、Blob
、DOMString
等物件構成的,將會被放進 Blob
;
options
:可選的 BlobPropertyBag
字典,它可能會指定如下兩個屬性
type
:預設值為 "",表示將會被放入到 blob
中的陣列內容的 MIME 型別。
endings
:預設值為"transparent
",用於指定包含行結束符n
的字串如何被寫入,不常用。
ArrayBuffer 物件用來表示通用的、固定長度的原始二進位制資料緩衝區。ArrayBuffer 的內容不能直接操作,只能通過 DataView 物件或 TypedArrray 物件來存取。這些物件用於讀取和寫入緩衝區內容。
TypedArray:用來生成記憶體的檢視,通過9個建構函式,可以生成9種資料格式的檢視。
DataViews:用來生成記憶體的檢視,可以自定義格式和位元組序。
new ArrayBuffer(bytelength)
FileReader用於讀取檔案並提取其內容, 可以將 Blob 讀取為不同的格式。
建立
const reader = new FileReader();
FileReader還有很多方法和事件,感興趣的可以去MDN上檢視。
let reader = new FileReader(); reader.readAsDataURL(file[0])
const base64toBlob = (base64Data, contentType, sliceSize) => { const byteCharacters = atob(base64Data); const byteArrays = []; for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) { const slice = byteCharacters.slice(offset, offset + sliceSize); const byteNumbers = new Array(slice.length); for (let i = 0; i < slice.length; i++) { byteNumbers[i] = slice.charCodeAt(i); } const byteArray = new Uint8Array(byteNumbers); byteArrays.push(byteArray); } const blob = new Blob(byteArrays, {type: contentType}); return blob; }
function blobToArrayBuffer(blob) { return new Promise((resolve, reject) => { const reader = new FileReader(); reader.onload = () => resolve(reader.result); reader.onerror = () => reject; reader.readAsArrayBuffer(blob); }); }
function blobToBase64(blob) { return new Promise((resolve) => { const reader = new FileReader(); reader.onloadend = () => resolve(reader.result); reader.readAsDataURL(blob); }); }
const blob = new Blob([new Uint8Array(buffer, byteOffset, length)]);
const base64 = btoa(String.fromCharCode.apply(null, new Uint8Array(arrayBuffer)));
const base64ConvertFile = function (urlData, filename) { // 64轉file if (typeof urlData != 'string') { return; } let arr = urlData.split(',') let type = arr[0].match(/:(.*?);/)[1] let fileExt = type.split('/')[1] let bstr = atob(arr[1]) let n = bstr.length let u8arr = new Uint8Array(n) while (n--) { u8arr[n] = bstr.charCodeAt(n); } return new File([u8arr], 'filename.' + fileExt, { type: type }); }
溫馨提示:由於文章篇幅有限,關於幾種二進位制的詳細用法可以去MDN檢視。
以上就是js二進位制資料及其互相轉化實現詳解的詳細內容,更多關於js二進位制資料互相轉化的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45