欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺談js圖片前端預(yù)覽之filereader和window.URL.createObjectURL

 更新時(shí)間:2016年06月30日 09:05:38   投稿:jingxian  
下面小編就為大家?guī)?lái)一篇淺談js圖片前端預(yù)覽之filereader和window.URL.createObjectURL。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧

淺談js圖片前端預(yù)覽之filereader和window.URL.createObjectURL

//preview img : filereader方式
  document.getElementById('imgFile').onchange = function(e){ 5     var ele = document.getElementById('imgFile').files[0];

    var fr = new FileReader();
    fr.onload = function(ele){

      var pvImg = new Image();
      pvImg.src = ele.target.result;
      pvImg.setAttribute('id','previewImg');

      $('.preview_wrap').html('').append(pvImg);18     }
    fr.readAsDataURL(ele);
  }
//preview img : URL.createObjectURL 方式
  document.getElementById('imgFile').onchange = function(e){
    var ele = document.getElementById('imgFile').files[0];

    var createObjectURL = function(blob){
     return window[window.webkitURL ? 'webkitURL' : 'URL']['createObjectURL'](blob);
    };
    var newimgdata = createObjectURL(ele);

    var pvImg = new Image();
    pvImg.src = newimgdata;
    pvImg.setAttribute('id','previewImg');

    $('.preview_wrap').html('').append(pvImg);
  }

以上先貼出用filereader 和 URL.createObjectURL 兩種預(yù)覽方式。

按照前輩們的說(shuō)法,creatObjectURL可以有更好的性能,或許是瀏覽器自帶接口的原因, 可以處理的更快。

最近做了一個(gè)需要上傳圖片預(yù)覽的項(xiàng)目,用的最簡(jiǎn)單的input file上傳,最開始想到的就是用filereader實(shí)現(xiàn)前端預(yù)覽,很簡(jiǎn)單,見前面的第一段代碼,在自己手機(jī)上測(cè)試,沒問題。但在某些奇葩手機(jī)上,比如oppo 安卓4.3在我們app的webview內(nèi)通過打開相冊(cè)上傳發(fā)現(xiàn)無(wú)法預(yù)覽圖片!但在該手機(jī)的微信,瀏覽器內(nèi)上傳均可以!

看了下代碼,如下圖,是因?yàn)閎ase64編碼內(nèi)缺少了圖片格式,手動(dòng)加上image/jpg圖片立即顯示,剛開始以為是readAsDataURL的問題,沒有編碼成功,找了一晚上原因,無(wú)解!不知哪根筋搭錯(cuò)突然想到打印出input file的type看看,發(fā)現(xiàn)type為空,而file的其他屬性均正常。

繼續(xù)百度(google最近公司FQ不穩(wěn)定,沒法用),結(jié)果看到有人遇到類似奇怪問題,但是沒有解決。

無(wú)意間卻發(fā)現(xiàn)圖片預(yù)覽除了filereader還可以用url.createObjectURL。晚上11點(diǎn)26,先趕最后一班地鐵。

=====================

第二天一早,把半夜的靈感實(shí)驗(yàn)了下,根據(jù)判斷input file的圖片類型,如果不存在就給文件手動(dòng)賦值類型。(見下方調(diào)試用代碼,有點(diǎn)亂)

結(jié)果發(fā)現(xiàn)file的type并不是你直接賦值就可以改變的,沒有用!

于是開始實(shí)踐URL.createObjectURL (見最上面的第二部分代碼)

神奇!發(fā)現(xiàn)預(yù)覽正常!

查看代碼發(fā)現(xiàn),createObjectURL得到的是一個(gè)http格式的文件,即使input file的文件類型不存在也不會(huì)編碼失敗。

以上這篇淺談js圖片前端預(yù)覽之filereader和window.URL.createObjectURL就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論