HTML5中的Blob對象和MYSQL中的BLOB類(lèi)型在概念上是有點(diǎn)區別的。MYSQL中的BLOB類(lèi)型就只是個(gè)二進(jìn)制數據容器。而HTML5中的Blob對象除了存放二進(jìn)制數據外還可以設置這個(gè)數據的MINE類(lèi)型,這相當于對文件的儲存,其它很多二進(jìn)制對象也是從這個(gè)對象繼承的。
一個(gè)Blob對象就是一個(gè)包含有只讀原始數據的類(lèi)文件對象.Blob對象中的數據并不一定得是JavaScript中的原生形式.File接口基于Blob,繼承了Blob的功能,并且擴展支持了用戶(hù)計算機上的本地文件.
創(chuàng )建Blob對象的方法有幾種,可以調用Blob構造函數,還可以使用一個(gè)已有Blob對象上的slice()方法切出另一個(gè)Blob對象,還可以調用canvas對象上的toBlob方法.
slice()方法仍帶有前綴:Firefox 12之前的版本上為blob.mozSlice(),Safari上為blob.webkitSlice().BlobBuilder接口,但并不是所有的瀏覽器都支持BlobBuilder,而且現有的BlobBuilder實(shí)現都是帶前綴的.更主要的是BlobBuilder已經(jīng)被廢棄,你應該盡可能的使用Blob構造函數來(lái)代替.| 屬性名 | 類(lèi)型 | 描述 |
size | unsigned long long | Blob對象中所包含數據的大小. 只讀. |
type | DOMString | 一個(gè)字符串,表明該Blob對象所包含數據的MIME類(lèi)型.如果類(lèi)型未知,則該值為空字符串. 只讀. |
Blob Blob( [optional] Array parts, [optional] BlobPropertyBag properties);
partsBlob對象中的數據.數組元素可以是任意多個(gè)的ArrayBuffer,ArrayBufferView (typed array), Blob,或者DOMString對象.propertiesBlob對象的一些屬性.查看BlobPropertyBag一節.返回一個(gè)新的Blob對象,包含了源Blob對象中指定范圍內的數據.
Blob slice( optional long long start, optional long long end, optional DOMString contentType};
start 可選slice方法.默認值為0.end 可選slice方法.默認值為最后一個(gè)索引.contentType 可選Blob對象的MIME類(lèi)型,這個(gè)值將會(huì )成為新的Blob對象的type屬性的值,默認為一個(gè)空字符串.一個(gè)新的Blob對象,包含了源Blob對象中指定范圍內的數據.
如果start參數的值比源Blob對象的size屬性的值還大,則返回的Blob對象的size值為0,也就是不包含任何數據.
一個(gè)包含有兩個(gè)屬性type和endings的對象.
typeBlob對象的type屬性.endings(已廢棄)BlobBuilder.append()方法的endings參數.該參數的值可以是"transparent"或者"native".下面的代碼:
var aFileParts = ["<a id=\"a\"><b id=\"b\">hey!<\/b><\/a>"];var oMyBlob = new Blob(aFileParts, { "type" : "text\/xml" }); // the blob等價(jià)于:
var oBuilder = new BlobBuilder();var aFileParts = ["<a id=\"a\"><b id=\"b\">hey!<\/b><\/a>"];oBuilder.append(aFileParts[0]);var oMyBlob = oBuilder.getBlob("text\/xml"); // the blobBlobBuilder接口提供了另外一種創(chuàng )建Blob對象的方式,但該方式現在已經(jīng)廢棄,所以不應該再使用了.
var typedArray = GetTheTypedArraySomehow();var blob = new Blob([typedArray], {type: "application/octet-binary"}); // 傳入一個(gè)合適的MIME類(lèi)型var url = URL.createObjectURL(blob);// 會(huì )產(chǎn)生一個(gè)類(lèi)似blob:d3958f5c-0777-0845-9dcf-2cb28783acaf這樣的URL字符串// 你可以像使用一個(gè)普通URL那樣使用它,比如用在img.src上.
slice()方法一開(kāi)始使用length來(lái)作為第二個(gè)參數,表示需要向新的Blob對象拷貝多少個(gè)字節.如果你指定的參數值start + length的值超過(guò)了源Blob對象的長(cháng)度,則返回的Blob對象包含了從start索引到源Blob對象結束索引處的所有數據.
這個(gè)版本的slice()實(shí)現于Firefox 4, WebKit,以及 Opera 11.10中.可是,由于這個(gè)語(yǔ)法和我們常用的Array.slice()以及String.slice()語(yǔ)法不同,所以已被廢棄.Gecko和WebKit目前支持的是新版的slice語(yǔ)法.
從Gecko 13.0 (Firefox 13.0 / Thunderbird 13.0 / SeaMonkey 2.10)和Chrome 21開(kāi)始,slice()去掉了前綴.?
在Gecko 12.0 (Firefox 12.0 / Thunderbird 12.0 / SeaMonkey 2.9)之前,slice()方法有個(gè)bug,就是參數start和end的值不能超出64位無(wú)符號數字范圍,現已修復.
聯(lián)系客服