成人怡红院-成人怡红院视频在线观看-成人影视大全-成人影院203nnxyz-美女毛片在线看-美女免费黄

站長資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

HTML5新特性之文件和二進(jìn)制數(shù)據(jù)的操作

歷史上,JavaScript無法處理二進(jìn)制數(shù)據(jù)。如果一定要處理的話,只能使用charCodeAt()方法,一個個字節(jié)地從文字編碼轉(zhuǎn)成二進(jìn)制數(shù)據(jù),還有一種辦法是將二進(jìn)制數(shù)據(jù)轉(zhuǎn)成Base64編碼,再進(jìn)行處理。這兩種方法不僅速度慢,而且容易出錯。ECMAScript5引入了Blob對象,允許直接操作二進(jìn)制數(shù)據(jù)。

Bolb對象是一個代表二進(jìn)制數(shù)據(jù)的基本對象,在它的基礎(chǔ)上,又衍生出一系列相關(guān)的API,用來操作文件。

  • File對象:負(fù)責(zé)處理那些以文件形式存在的二進(jìn)制數(shù)據(jù),也就是操作本地文件

  • FileList對象:File對象的網(wǎng)頁表單接口

  • FileReader對象:負(fù)責(zé)將二進(jìn)制數(shù)據(jù)讀入內(nèi)存

  • URL對象:用于對二進(jìn)制數(shù)據(jù)生成URL

1、Blob對象

Blob(Binary Large Object)對象代表了一段二進(jìn)制數(shù)據(jù),提供了一系列操作接口。其他操作二進(jìn)制數(shù)據(jù)的API(比如File對象),都是建立在Blob對象基礎(chǔ)上的,繼承了它的屬性和方法。

生成Blob對象有兩種方法:一種是使用Blob構(gòu)造函數(shù),另一種是對現(xiàn)有的Blob對象使用slice方法切出一部分。

(1)Blob構(gòu)造函數(shù),接受兩個參數(shù)。第一個參數(shù)是一個包含實際數(shù)據(jù)的數(shù)組,第二個參數(shù)是數(shù)據(jù)的類型,這兩個參數(shù)都不是必需的。

var htmlParts = ['<a id="a"><b id="b">hey!</b></a>'];  var myBlob = new Blob(htmlParts, {'type': 'text/xml'});

下面是一個利用Blob對象,生成可下載文件的例子。

var blob = new Blob(['Hello World']);var a = document.createElement('a');  a.href = window.URL.createObjectURL(blob);  a.donwload = 'hello-world.txt';  a.textContent = 'Download Hello World';    body.appendChild(a);

上面的代碼生成了一個超級鏈接,點擊后提示下載文本文件hello-world.txt,文件內(nèi)容為"Hello World"。

(2) Blob對象的slice方法,將二進(jìn)制數(shù)據(jù)按照字節(jié)分塊,返回一個新的Blob對象。

var newBlob = oldBlob.slice(startingByte, endindByte);

下面是一個使用XMLHttpRequest對象,將大文件分割上傳的例子。

function upload(blobOrFile) {  var xhr = new XMLHttpRequest();    xhr.open('POST', '/server', true);    xhr.onload = function(e) { ... };    xhr.send(blobOrFile);  }    document.querySelector('input[type="file"]').addEventListener('change', function(e) {    var blob = this.files[0];    var BYTES_PER_CHUNK = 1024 * 1024; // 1MB chunk sizes.    var SIZE = blob.size;  var start = 0;      var end = BYTES_PER_CHUNK;  while(start < SIZE) {      upload(blob.slice(start, end));        start = end;      end = start + BYTES_PER_CHUNK;    }  }, false);

(3)Blob對象有兩個只讀屬性:

  • size:二進(jìn)制數(shù)據(jù)的大小,單位為字節(jié)。

  • type:二進(jìn)制數(shù)據(jù)的MIME類型,全部為小寫,如果類型未知,則該值為空字符串。

在Ajax操作中,如果xhr.responseType設(shè)為blob,接收的就是二進(jìn)制數(shù)據(jù)。

2、FileList對象

FileList對象針對表單的File控件。當(dāng)用戶通過file控件選取文件后,這個控件的files屬性值就是FileList對象。它在結(jié)構(gòu)上類似于數(shù)組,包含用戶選取的多個文件。

<input type="file" id="input" onchange="console.log(this.files.length)" multiple />

當(dāng)用戶選取文件后,就可以讀取該文件。

var selected_file = document.getElementById('input').files[0];

采用拖放方式,也可以得到FileList對象。

var dropZone = document.getElementById('drop_zone');  dropZone.addEventListener('drop', handleFileSelect, false);  function handleFileSelect(evt) {      evt.stopPropagation();      evt.preventDefault();          var files = evt.dataTransfer.files; // FileList object.        // ...}

上面代碼的 handleFileSelect 是拖放事件的回調(diào)函數(shù),它的參數(shù)evt是一個事件對象,該參數(shù)的dataTransfer.files屬性就是一個FileList對象,里面包含了拖放的文件。

3、File對象

File對象是FileList對象的成員,包含了文件的一些元信息,比如文件名、上次改動時間、文件大小和文件類型。它的屬性值如下:

  • name:文件名,該屬性只讀

  • size:文件大小,單位為字節(jié),該屬性只讀

  • type:文件的MIME類型,如果分辨不出類型,則為空字符串,該屬性只讀。

  • lastModifiedDate:文件的上次修改時間,該屬性只讀。

var selected_file = document.getElementById('input').files[0];  var fileName = selected_file.name;  var fileSize = selected_file.size;  var fileType = selected_file.type;

4、FileReader 對象

FileReader對象接收File對象或Blob對象作為參數(shù),用于讀取文件的實際內(nèi)容,即把文件內(nèi)容讀入內(nèi)存。對于不同類型的文件,F(xiàn)ileReader使用不同的方法讀取。

  • FileReader.readAsBinaryString(Blob|File) :讀取結(jié)果為二進(jìn)制字符串,每個字節(jié)包含一個0到255之間的整數(shù)。

  • FileReader.readAsText(Blob|File, opt_encoding) :讀取結(jié)果是一個文本字符串。默認(rèn)情況下,文本編碼格式是'UTF-8',可以通過可選的格式參數(shù),指定其他編碼格式的文本。

  • FileReader.readAsDataURL(Blob|File) : 讀取結(jié)果是一個基于Base64編碼的 data-uri 對象。

  • FileReader.readAsArrayBuffer(Blob|File) :讀取結(jié)果是一個 ArrayBuffer 對象。

FileReader采用異步方式讀取文件,可以為一系列事件指定回調(diào)函數(shù)。

  • onabort:讀取中斷或調(diào)用reader.abort()方法時觸發(fā)。

  • onerror:讀取出錯時觸發(fā)。

  • onload:讀取成功后觸發(fā)。

  • onloadend:讀取完成后觸發(fā),不管是否成功。觸發(fā)順序排在 onload 或 onerror 后面。

  • onloadstart:讀取將要開始時觸發(fā)。

  • onprogress:讀取過程中周期性觸發(fā)。

下面的代碼是如何展示文本文件的內(nèi)容。

var reader = new FileReader();    reader.onload = function(e){         console.log(e.target.result);  }    reader.readAsText(blob);

onload事件的回調(diào)函數(shù)接受一個事件對象,該對象的target.result就是文件的內(nèi)容。

下面是一個使用readAsDataURL方法,為img元素添加src屬性的例子。

var reader = new FileReader();    reader.onload = function(e) {      document.createElement('img').src = e.target.result;    };    reader.readAsDataURL(f);

下面是一個onerror事件回調(diào)函數(shù)的例子。

var reader = new FileReader();  reader.onerror = errorHandler;  function errorHandler(evt) {      switch(evt.target.error.code) {        case evt.target.error.NOT_FOUND_ERR:          alert('File Not Found!');                  break;                case evt.target.error.NOT_READABLE_ERR:          alert('File is not readable');                  break;                case evt.target.error.ABORT_ERR:                  break;                default:          alert('An error occurred reading this file.');      };  }

下面是一個onprogress事件回調(diào)函數(shù)的例子,主要用來顯示讀取進(jìn)度。

var reader = new FileReader();  reader.onprogress = updateProgress;function updateProgress(evt) {      if (evt.lengthComputable) {        var percentLoaded = Math.round((evt.loaded / evt.totalEric Bidelman) * 100);              var progress = document.querySelector('.percent');              if (percentLoaded < 100) {          progress.style.width = percentLoaded + '%';          progress.textContent = percentLoaded + '%';        }      }  }

讀取大文件的時候,可以利用Blob對象的slice方法,將大文件分成小段,逐一讀取,這樣可以加快處理速度。

5、URL對象

URL對象用于生成指向File對象或Blob對象的URL。

var objecturl =  window.URL.createObjectURL(blob);

上面的代碼會對二進(jìn)制數(shù)據(jù)生成一個URL,類似于“blob:http%3A//test.com/666e6730-f45c-47c1-8012-ccc706f17191”。這個URL可以放置于任何通常可以放置URL的地方,比如img標(biāo)簽的src屬性。需要注意的是,即使是同樣的二進(jìn)制數(shù)據(jù),每調(diào)用一次URL.createObjectURL方法,就會得到一個不一樣的URL。

這個URL的存在時間,等同于網(wǎng)頁的存在時間,一旦網(wǎng)頁刷新或卸載,這個URL就失效。除此之外,也可以手動調(diào)用URL.revokeObjectURL方法,使URL失效。

window.URL.revokeObjectURL(objectURL);

下面是一個利用URL對象,在網(wǎng)頁插入圖片的例子。

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

還有一個本機視頻預(yù)覽的例子。

var video = document.getElementById('video');var obj_url = window.URL.createObjectURL(blob);  video.src = obj_url;  video.play()  window.URL.revokeObjectURL(obj_url);

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
亚洲AV无码专区在线观看亚| 亚洲高清毛片一区二区| 欧美XXXXX高潮喷水| 精品人妻无码专区中文字幕 | 老熟女露脸内射正在播放| 国产免费不卡午夜福利在线| 成年网站免费视频黄A站| 99久久99久久免费精品蜜桃| 雨后小故事完整版| 亚洲欧美乱综合图片区小说区| 武侠 欧美 另类 人妻| 熟女高潮精品一区二区三区| 人妻av无码一区二区| 麻豆文化传媒精品一区观看| 久久不见久久见免费视频3| 狠狠色噜噜狠狠狠8888在| 国产精品亚韩精品无码A在线| 国产99久9在线视频传媒| 成人伊人亚洲人综合网| 办公室撕开奶罩吮奶在线观看| 99精品又大又爽又粗少妇毛片| 成人毛片亚洲高潮无码精品色| 国产精华AV午夜在线观看| 国产成人毛片在线视频| 国产99在线 | 黑人| 国内精品久久人妻无码| 国产在线拍揄自揄拍免费下载| 国产精品亚洲А∨天堂2021| 久久精品国产99国产精品澳门| 精产国品一二三产区M553麻豆| 国产性猛交╳XXX乱大交| 国产精品宅男擼66M3U8| 久久久精品妓女影院妓女网| 久久久久久精品免费免费| 久久久久国色ΑV免费观看| 欧美性爱群交视频| 欧美猛少妇色XXXXX猛叫| 男人边吃奶边做呻吟免费视频| 美女裸体跪姿扒开屁股无内裤| 久久97超碰色中文字幕蜜芽| 久久97人妻AⅤ无码一区| 欧美喷潮久久久XXXXX| 无码人妻精品一区二区蜜桃网站| 西西4444WWW大胆无码| 又色又爽又黄又无遮挡网站| 成人亚洲综合AV天堂| 精品人妻伦一二三区久久| 强被迫伦姧惨叫VIDEO| 人妻无码少妇一区二区 | 久久99成人精一区二区三区| 人人爽人人操人人精品| 色88久久久久高潮综合影院| 双胞胎一前一后夹心饼干年下| 亚洲一久久久久久久久| 尤物永久免费AV无码网站| 粉嫩av一区二区精品爆乳| 国产精品成人99一区无码| 国产无遮挡又黄又爽无VIP| 狠狠色噜噜狠狠狠狠888奇禾| 欧美精品AⅤ一区二区三区| 日韩免费高清大片在线| 无码国产精品一区二区免费式直播 | 国产CHINESE中国HDXX| 国产亚洲成AⅤ人片在线观看蜜桃| 蜜芽AV在线新地址| 亚洲AV成人片无码网站网一区| 亚洲精品TV久久久久久久久| 在线视频精品中文无码| www.丁香五月| 国产精品白丝JK白祙喷水视频| 乱老熟女成熟50ⅩXXX小| 轻点灬大JI巴大粗长了视频| 亚洲国产欧美在线成人| 国产AV妓女影视妓女影院| 蜜桃AV一区二区三区| 亚洲AV无码专区亚洲猫咪| 成人午夜无码国产| 免费看30分钟打扑克教程| 肉大捧一进一出免费视频| 亚洲AV高清一区二区三区| 硬插人妻一区二区三区| 成人免费无遮挡无码黄漫视频| 久久久久亚洲AV综合仓井空| 欧美性爱小说网站| 野草乱码一二三四区别在哪| 爱情岛永久地址WWW成人| 国产乱子伦在线观看| 人人妻人人澡人人爽| 中国丰满熟妇XXXX性| 极品人妻系列人妻30P| 玩弄人妻熟妇性色AV少妇| 亚洲无人区码一码二码三码区别| 国产成人蜜桃AV无码永久免费| 欧美人与动牲交免费观看视频| 亚洲熟妇无码V在线观看| 八区精品色欲人妻综合网| 老师上课跳D突然被开到最大视频| 亚洲 熟 图片 小说 乱 妇| 18禁男女爽爽爽午夜网站免费 | 人妻中文字幕在线| 18禁无遮挡无码网站免费| 久久成人A毛片免费观看网站| 无码熟妇人妻AV在线影院| 一边做饭一边躁狂的原因分析| 边做边爱免费视频| 精产国品一区别视频| 无码人妻一区二区三区免费| 成人爽A毛片免费网站美国| 欧洲多毛裸体XXXXX| 亚洲AV无码一区二区二三区| AV人摸人人人澡人人超碰妓女| 国产日韩综合一区二区性色AV| 某处紧密的结合在一起| 亚洲同性猛男毛片| 激情综合色综合久久综合 | 久久香蕉超碰97国产精品| 四虎影视国产精品久久| 永久免费看啪啪的网站| 精品亚洲国产成人蜜臀优播AV| 亚洲AV无码久久寂寞少妇多毛 | 午夜无码视频在线观看网站| 囯精产品一品二品国精| 少妇被躁C至高潮HD| 伊人久久大香线蕉综合影院首页 | 夫妻毛片盗摄国产内射| 麻豆AV无码精品一区二区| 野花韩国高清免费神马| 久久久久精品国产三级| 亚洲愉拍自拍欧美精品| 国产精品后入内射日本在线观看| 熟妇高潮一区二区在线播放| 各种少妇BBW撒尿| 天堂А√在线最新版在线| 99精品视频在线观看免费| 韩国V欧美V亚洲V日本| 日韩一区二区三区人妻系列| 边做边爱MP3在线播放免费观看| 日本COSME大赏美白| 大明荫蒂女人毛茸茸| 免费看成人毛片无码视频| 18VIDEOSEX性欧美| 欧美日韩一区二区三区精品视频| ンピースのエロス在线WWW| 久久久久久精品免费免费软件| 一本久久精品一区二区| 孩交乱子XXXX高清影视| 亚洲乱码中文论理电影| 国产免费午夜福利蜜芽无码| 亚洲AV无码国产精品夜色午夜| 精品久久久久久久无码| 永久免费AV网站可以直接看的| 女人和拘做受A级毛片| 夜夜嗨AV一区二区三区| 男男GAy作爱免费观看| 宝贝把腿张得大一点就不痛了 | 国产精品日本一区二区不卡视频| 漂亮人妻熟睡中被公侵犯中文版| 白嫩的18SEX少妇HD| 天堂8А√中文在线官网| 国产午夜精品无码| 亚洲性色AV片在线观看网址| 免费A级毛片无码A∨性按摩| 锕锕锕锕锕锕~好深啊电影APP| 色吊丝AV中文字幕| 国产精品自在欧美一区| 亚洲精品AⅤ无码精品丝袜足| 麻豆CHINESE男男GAYF| 暗夜免费观看在线完整版| 无码AV大香线蕉| 精品一区二区三区| 99久久久国产精品免费牛牛 | 亚洲人午夜射精精品日韩| 国内精品宾馆在线精品酒店| 亚洲午夜国产精品无码老牛影视| 女人18片毛片60分钟| 夫妇交换聚会群4P疯狂大战视频| 亚洲国产成人无码精品| 免费看片A级毛片免费看| 成熟丰满熟妇自慰XXXXX| 人人妻人人澡人人爽人人精品浪潮| 国产波霸爆乳一区二区| 熟女乱色一区二区三区| 娇妻当着我的面被4P| 99RE久久精品国产| 斯诺克直播在线观看高清直播| 精品国产V无码大片在线观看| 亚洲国产精品久久久久秋霞影院 | 舌尖伸入湿嫩蜜汁呻吟| 丰满老熟好大BBBBBB| 色视频WWW在线播放国产人成| 国产无人区一码二码三码MBA| 永久黄网站色视频免费直播| 色综合99久久久无码国产精品| 丰满人妻被两个按摩师| 亚洲成人免费AV| 久久国产精久久精产国| XXⅩ鲁交自慰免费看| 日韩精品一区二区三区中文| 精品国产第一福利网站| 保守人妻精油按摩被强出|