最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript之Blob對象類型的具體使用方法

 更新時間:2019年11月29日 10:09:31   作者:selfimpr1031  
這篇文章主要介紹了JavaScript之Blob對象類型的具體使用方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

Blob(Binary Large Object)術語最初來自數(shù)據(jù)庫(oracle 中也有類似的欄位類型。),早期數(shù)據(jù)庫因為要存儲聲音、圖片、以及可執(zhí)行程序等二進制數(shù)據(jù)對象所以給該類對象取名為Blob。 

 在Web領域,Blob被定義為包含只讀數(shù)據(jù)的類文件對象。Blob中的數(shù)據(jù)不一定是js原生數(shù)據(jù)形式。常見的File接口就繼承自Blob,并擴展它用于支持用戶系統(tǒng)的本地文件。

構建一個Blob對象通常有三種方式:

  • 通過Blob對象的構造函數(shù)來構建。
  • 從已有的Blob對象調用slice接口切出一個新的Blob對象。
  • canvas API toBlob方法,把當前繪制信息轉為一個Blob對象。下面只看第一種的實現(xiàn):

用法:新方法創(chuàng)建Blob 對象(構造函數(shù)來構建)

var blob = new Blob(array[optional], options[optional]);

構造函數(shù),接受兩個參數(shù)

第一個參數(shù):為一個數(shù)據(jù)序列,可以是任意格式的值,例如,任意數(shù)量的字符串,Blobs 以及 ArrayBuffers。

第二個參數(shù):用于指定將要放入Blob中的數(shù)據(jù)的類型(MIME)(后端可以通過枚舉MimeType,獲取對應類型:

MimeType mimeType = MimeType.toEnum(file.getContentType());)。
 <script>
 var blob = new Blob(["Hello World!"],{type:"text/plain"});
 </script>

Blob對象的基本屬性:

  • size :Blob對象包含的字節(jié)數(shù)。(只讀)
  • type : Blob對象包含的數(shù)據(jù)類型MIME,如果類型未知則返回空字符串。

原生對象構建Blob

<script type="text/javascript">
window.onload = function() {
 var blob = new Blob(1234);
}
</script>

提示出錯:

Uncaught TypeError: Failed to construct ‘Blob': The 1st argument is neither an array, nor does it have indexed properties.

原因在于Blob構造函數(shù)要求第一個參數(shù)必須是數(shù)組,而這里第一個參數(shù)既不是一個數(shù)組,也沒有可索引的屬性。既然這里提到了對象的可索引屬性,讓我聯(lián)想到了類數(shù)組的概念,而Arguments就是一個很好的例子。來試一試:

<script type="text/javascript">
function testArgumentsBlob() {
 var blob = new Blob(arguments);
 console.log(blob.size);//3
 console.log(blob.type);//""
}
window.onload = function() {
 testArgumentsBlob(1, 2, 3);
}
</script>

可以看到即使是類數(shù)組對象,而數(shù)組元素類型是Number也能得出正確的結論,猜想大概是由于構造函數(shù)內部把Number轉化為String的緣故吧!

再來試一試其他的參數(shù)類型:

window.onload = function() {
 var arg = {hello: "2016"};
 var blob = new Blob([JSON.stringify(arg, null, "\t")], {type: "application/json"});
 console.log(blob.type);//application/json
 console.log(blob.size);//20
}

blob.type等于application/json沒問題。arg轉為字符串后的長度為16加上制表符\t的寬度4個字節(jié)等于20。

Blob對象的基本方法: 

大文件分割 (slice() 方法),slice方法與數(shù)組的slice類似。

Blob.slice([start, [end, [content-type]]])

slice() 方法接受三個參數(shù),起始偏移量,結束偏移量,還有可選的 mime 類型。如果 mime 類型,沒有設置,那么新的 Blob 對象的 mime 類型和父級一樣。

當要上傳大文件的時候,此方法非常有用,可以將大文件分割分段,然后各自上傳,因為分割之后的 Blob 對象和原始的是獨立存在的。

不過目前瀏覽器實現(xiàn)此方法還沒有統(tǒng)一,火狐使用的是 mozSlice() ,Chrome 使用的是 webkitSlice() ,其他瀏覽器則正常的方式 slice() 

可以寫一個兼容各瀏覽器的方法:

 function sliceBlob(blob, start, end, type) {
 type = type || blob.type;
 if (blob.mozSlice) {
  return blob.mozSlice(start, end, type);
 } else if (blob.webkitSlice) {
  return blob.webkitSlice(start, end type);
 } else {
  throw new Error("This doesn't work!");
 }
 }

利用Blob顯示縮略圖`

var input = document.createElement("input");
input.type = "file";
input.accept = "image/*";
input.multiple = true;
input.style.display = "none";
document.body.appendChild(input);

var fileSelect = document.createElement("a");
fileSelect.href = "#";
fileSelect.appendChild(document.createTextNode("Choose files"));
document.body.appendChild(fileSelect);

var imgList = document.createElement("div");
imgList.innerHTML = "<p>No file Selected!</p>"
document.body.appendChild(imgList);

input.addEventListener("change", function(e) {
var files = this.files;
if(!files.length) {
return;
}
imgList.innerHTML = "";
var list = document.createElement("ul");
imgList.appendChild(list);
for(var i = 0; i < files.length; i++) {
var li = document.createElement("li"); 
list.appendChild(li);

var img = document.createElement("img");
img.src = window.URL.createObjectURL(files[i]);
img.height = 60;
img.width = 60;
img.onload = function() {
window.URL.revokeObjectURL(this.src);
}
li.appendChild(img);
var info = document.createElement("span");
info.innerHTML = files[i].name + ":" + files[i].size + " bytes";
li.appendChild(info);
}
}, false);

fileSelect.addEventListener("click", function(e) {
input.click(); 
e.preventDefault();
}, false);

由于File對象繼承自Blob,所以我們可以很方便的利用File對象加載本地系統(tǒng)圖片文件,并通過createObjectURL生成一個URL并加以顯示。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Svg.js實例教程及使用手冊詳解(一)

    Svg.js實例教程及使用手冊詳解(一)

    SVG.js是一個輕量級的JavaScript庫,允許你輕松操作SVG和定義動畫。這篇文章主要介紹了Svg.js實例教程及使用手冊詳解(一) 的相關資料,需要的朋友可以參考下
    2016-05-05
  • 微信分享的標題、縮略圖、連接及描述設置方法

    微信分享的標題、縮略圖、連接及描述設置方法

    微信分享的標題、縮略圖、連接及描述該如何設置,這個問題確實難道不少朋友,下面有個示例,大家可以看看
    2014-10-10
  • 45個JavaScript編程注意事項、技巧大全

    45個JavaScript編程注意事項、技巧大全

    這篇文章主要介紹了45個JavaScript編程注意事項、技巧大全,在這篇文章里,我將分享一些JavaScript的技巧、秘訣和最佳實踐,除了少數(shù)幾個外,不管是瀏覽器的JavaScript引擎,還是服務器端JavaScript解釋器,均適用,需要的朋友可以參考下
    2015-02-02
  • 百度地圖api如何使用

    百度地圖api如何使用

    如果想用百度地圖api,首先需要先獲取一個百度地圖api的密鑰,然后引入百度地圖的api,這篇文章就講下百度地圖api如何使用的相關資料,需要的朋友可以參考下
    2015-08-08
  • JS中setTimeout()的用法詳解

    JS中setTimeout()的用法詳解

    setTimeout( ) 是屬于 window 的 method, 但我們都是略去 window 這頂層物件名稱, 這是用來設定一個時間, 時間到了, 就會執(zhí)行一個指定的 method
    2013-04-04
  • javascript 二進制運算技巧解析

    javascript 二進制運算技巧解析

    javascript 中的二進制運算的一些技巧,曬出來和你們分享一下,希望可以幫助你們
    2012-11-11
  • TypeScript中的混合(Mixin)示例詳解

    TypeScript中的混合(Mixin)示例詳解

    由于TypeScrip中的類不支持多繼承,所以引入了混合(Mixin)的特性,可以間接實現(xiàn)多繼承的效果,這篇文章主要介紹了一文弄懂TypeScript中的混合(Mixin),需要的朋友可以參考下
    2023-09-09
  • 詳解Js模塊化的作用原理和方案

    詳解Js模塊化的作用原理和方案

    這篇文章主要介紹了Js模塊化的作用原理和方案,對JS模塊化感興趣的同學,可以參考下
    2021-04-04
  • 理解?JavaScript?對象屬性訪問的復雜性(示例代碼)

    理解?JavaScript?對象屬性訪問的復雜性(示例代碼)

    在?JavaScript?編程中,開發(fā)者經(jīng)常需要對對象的屬性進行訪問,然而,訪問方式的不同可能導致代碼行為的差異,尤其在動態(tài)屬性的處理中,本文介紹JavaScript對象屬性訪問的復雜性,感興趣的朋友跟隨小編一起看看吧
    2024-12-12

最新評論

蓝山县| 普兰店市| 岚皋县| 南澳县| 昌图县| 昌图县| 元谋县| 金川县| 台南县| 葵青区| 德惠市| 茂名市| 富锦市| 环江| 开远市| 新龙县| 许昌县| 大兴区| 新密市| 兴海县| 阜南县| 葫芦岛市| 略阳县| 循化| 当阳市| 昆明市| 廉江市| 松桃| 时尚| 泗阳县| 田林县| 恩施市| 潢川县| 枝江市| 清流县| 德州市| 阜宁县| 娱乐| 乐业县| 陇西县| 绥芬河市|