BLOB二进制大数据
2016-04-27 18:51
323 查看
What is a Blob?
A blob object represents a chuck of bytes that holds data of a file.But a blob is not a reference to a actual file, it may seem like it is.
A blob has its size and MIME type just like a file has.
Blob data is stored in the memory or filesystem depending on the browser and blob size. A blob can be used like a file wherever we use files.
Most APIs for working with blobs are asynchronous. But synchronous versions of APIs are also available so that they can be used in Web Workers.
Content of a blob can be read as ArrayBuffer and therefore it makes blobs very handy to store binary data.
Creating a Blob
A blob can be created using Blob class.//first arguement must be an regular array. The array can be of any javascript objects. Array can contain array to make it multi dimensional //second parameter must be a BlogPropertyBag object containing MIME property var myBlob = new Blob(["This is my blob content"], {type : "text/plain"});
In the above code we saw how we can insert data to a blob. We can read data from a blob using FileReader Class.
Example:
JS code:
//first arguement must be an regular array. The array can be of any javascript objects. Array can contain array to make it multi dimensional //second parameter must be a BlogPropertyBag object containing MIME property var myBlob = new Blob(["This is my blob content"], {type : "text/plain"});
var myReader = new FileReader();
//handler executed once reading(blob content referenced to a variable) from blob is finished.
myReader.addEventListener("loadend", function(e){
document.getElementById("paragraph").innerHTML = e.srcElement.result;//prints a string
});
//start the reading process.
myReader.readAsText(myBlob);
HTML code:
<p id="paragraph"></p>
result :This is my blob content
Blob URLs
As we have file:// URLs, referencing to a real file in local filesystem.Similarly we have blob:// URLs referencing to an blob. blob:// URLs can be used almost wherever we use regular URLs.
A blob:// URL to a blob can be obtained using the createObjectURL object.
example:
JS code:
//cross browser window.URL = window.URL || window.webkitURL; var blob = new Blob(['body { background-color: yellow; }'], {type: 'text/css'}); var link = document.createElement('link'); link.rel = 'stylesheet'; //createObjectURL returns a blob URL as a string. link.href = window.URL.createObjectURL(blob); document.body.appendChild(link);
the result is the document color is yellow.
revokeObjectURL(url : String) : return undefined
function is to frees the resources associated with the
urlcreated by
createObjectURL().
Remote data as Blobs
We can retrieve remote files using AJAX and and store the file data inside a blob.AJAX API provides us a method to download and store remote files in form of blobs.
example:
JS code:
var xhr = new XMLHttpRequest(); xhr.open("GET", "/favicon.png"); xhr.responseType = "blob";//force the HTTP response, response-type header to be blob xhr.onload = function() { document.getElementsByTagName("body")[0].innerHTML = xhr.response;//xhr.response is now a blob object } xhr.send();
Result:[object Blob]
We can get the blob content in an ArrayBuffer and then analyze the ArrayBuffer as binary data. This can be done using FileReader.readAsArrayBuffer() method.
example:
JS code:
var xhr = new XMLHttpRequest(); xhr.open("GET", "/favicon.png"); //although we can get the remote data directly into an arraybuffer using the string "arraybuffer" assigned to responseType property. //For the sake of example we are putting it into a blob and then copying the blob data into an arraybuffer. xhr.responseType = "blob"; function analyze_data(blob) { var myReader = new FileReader(); myReader.readAsArrayBuffer(blob) myReader.addEventListener("loadend", function(e) { var buffer = e.srcElement.result;//arraybuffer object }); } xhr.onload = function() { analyze_data(xhr.response); } xhr.send();
Conclusion
Blobs are very useful while working with binary remote files. A blob can be very large i.e., can contain audio and video data too. They can be created dynamically and using blob URLs they can be used as files. You can use them in many different ways to make them more useful. Thanks for reading.
Intro of BLOB
Blobs are immutable objects that represent raw data.File is a derivation of Blob that represents data from the file system.
UseFileReader to read data from a Blob or File.
Blobs allow you to construct file like objects on the client that you can pass to apis that expect urls instead of requiring the server provides the file. For example, you can construct a blob containing the data for an image, use
URL.createObjectURL()to generate a url, and pass that url to
HTMLImageElement.srcto display the image you created without talking to a server.
Constructors
new Blob(blobParts : Array, [blobPropertyBag : Object]) : BlobblobPropertyBag : {
type | String | A valid mime type such as 'text/plain' |
endings | String | Must be either 'transparent'or 'native' |
Creates a new
Blob. The elements of
blobPartsmust be of the types
ArrayBuffer,
ArrayBufferView,
Blob, or
String. If
endingis set to
'native', the line endings in the blob will be converted to the system line endings, such as
'\r\n'for Windows or
'\n'for Mac.
var blob = new Blob(['foo', 'bar']); console.log('size=' + blob.size); // result is size=6 console.log('type=' + blob.type);//result is type= var testEndings = function(string, endings) { var blob = new Blob([string], { type: 'plain/text', endings: endings }); var reader = new FileReader(); reader.onload = function(event){ console.log(endings + ' of ' + JSON.stringify(string) + ' => ' + JSON.stringify(reader.result)); }; reader.readAsText(blob); }; testEndings('foo\nbar', 'native');//result is native of "foo\nbar" => "foo\r\nbar" testEndings('foo\r\nbar', 'native');//result is native of "foo\r\nbar" => "foo\r\nbar" testEndings('foo\nbar', 'transparent');//result is transparent of "foo\nbar" => "foo\nbar" testEndings('foo\r\nbar', 'transparent');//result is transparent of "foo\r\nbar" => "foo\r\nbar"
Instance Properties
size : Number readonlyThe size of the blob in bytes.
type : String readonly
The type of the blob.
Instance Methods
slice([start = 0 : Number, [end : Number, [contentType = '' : String]]]) : BlobReturns a new blob that contains the bytes
startto
end - 1from
this. If
startor
endis negative, the value is added to
this.sizebefore performing the slice. If
endis not specified,
this.sizeis used. The returned blob's
typewill be
contentTypeif specified, otherwise it will be
''.
var blob = new Blob(['foo', 'bar'], { type: 'plain/text', endings: 'native' }); console.log('blob size:', blob.size); //result is blob size: 6 console.log('blob type:', blob.type);//result is blob type: plain/text var copy = blob.slice() console.log('copy size:', copy.size);//result is copy size: 6 console.log('copy type:', copy.type);//result is copy type: var slice = blob.slice(1, 4, 'foo-type') console.log('slice size:', slice.size);//resut is slice size: 3 console.log('slice type:', slice.type);//result is slice type: foo-type
相关文章推荐
- 线程sleep() 和 wait()简单比较
- MySQLReplicaion的常用架构
- grails在服务类中获取配置文件的值
- 调用grails领域类save方法没反应,不成功问题
- Failure [INSTALL_FAILED_UPDATE_INCOMPATIBLE]
- CTS DownloadManagerTest testMinimumDownload failed
- CTS DownloadManagerTest testMinimumDownload failed
- 2014年山东ACM第五届省赛 angry_birds_again_and_again(数学积分)
- error: linker command failed with exit code 1 (use -v to see invocation)怎么解决
- [大数据]使用hive做数据分析
- Climbing Stairs 带测试版
- win7系统开机提示cpu variable mtrr configure failed解决方法
- relation "public.***" contains more than "max_fsm_pages" pages with useful free space
- fail2ban 配置文件说明
- SSH登陆 Write failed: Broken pipe解决办法
- 大数据:70多个网站让你免费获取大数据存储库
- Vagrant: Warning: Authentication failure. Retrying
- Codeforces 582B Once Again... 【LIS变形】
- 【翻译】Xibo官方文档6-CMS Maintenance
- 朴素贝叶斯 垃圾邮件检测 Naive Bayes Spam detection