中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

js中的Blob對象類型解析

發布時間:2020-04-20 14:50:25 來源:億速云 閱讀:1390 作者:小新 欄目:web開發

今天小編給大家分享的是js中的Blob對象類型解析,很多人都不太了解,今天小編為了讓大家更加了解js中的Blob對象類型,所以給大家總結了以下內容,一起往下看吧。一定會有所收獲的哦。

js中的Blob對象類型解析

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

1、通過Blob對象的構造函數來構建。

2、從已有的Blob對象調用slice接口切出一個新的Blob對象。

3、canvas API toBlob方法,把當前繪制信息轉為一個Blob對象。下面只看第一種的實現:

用法:新方法創建Blob 對象(構造函數來構建)

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

構造函數,接受兩個參數

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

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

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

Blob對象的基本屬性:

size :Blob對象包含的字節數。(只讀)

type : Blob對象包含的數據類型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構造函數要求第一個參數必須是數組,而這里第一個參數既不是一個數組,也沒有可索引的屬性。既然這里提到了對象的可索引屬性,讓我聯想到了類數組的概念,而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>

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

再來試一試其他的參數類型:

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個字節等于20。

Blob對象的基本方法:

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

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

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

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

不過目前瀏覽器實現此方法還沒有統一,火狐使用的是 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對象加載本地系統圖片文件,并通過createObjectURL生成一個URL并加以顯示。

以上就是js中的Blob對象類型解析的詳細內容了,看完之后是否有所收獲呢?如果想了解更多相關內容,歡迎來億速云行業資訊!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宜宾市| 潮州市| 巴东县| 淮阳县| 华池县| 普洱| 博乐市| 沁水县| 土默特右旗| 丰镇市| 桐庐县| 柳河县| 巴楚县| 双桥区| 诸城市| 武穴市| 古交市| 隆昌县| 南阳市| 海原县| 三门县| 镇巴县| 和平区| 淅川县| 卓尼县| 通化县| 都昌县| 韶关市| 改则县| 吉木萨尔县| 中牟县| 思南县| 同仁县| 色达县| 富蕴县| 东乌珠穆沁旗| 永川市| 彰化市| 游戏| 都兰县| 大姚县|