国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

詳解angularJS+Ionic移動端圖片上傳的解決辦法

2019-11-19 15:28:25
字體:
來源:轉載
供稿:網友

前端開發中經常會碰到圖片上傳的問題,網上的解決辦法很多,可是有些圖片上傳的插件會有一些附屬的插件,因此因為一個圖片上傳的問題可能額需要引入其他插件到項目中,久而久之項目會不倫不類,有時候插件之間也會有一些沖突,所以我們可以自己寫一個圖片上傳的方法。

今天的demo是幫朋友做的一個移動端微信公眾號項目,項目架構采用angular+ionic,因為對dom的操作jQuery會方便很多,但是jQuery比較厚重,所以最后選擇用輕量級的zepto來對項目dom進行操作。

項目中有一個需求是上傳個人作品,實現功能需要H5新對象 FormData對象、XMLHttpRequest對象、FileReader對象。只需要這三個對象即可,話不多說上代碼。

dom結構:

js結構:

function1:

$scope.imgList = [];$scope.setUploader = function () {  var files = document.getElementById('photo');  files.click();  $(files).unbind().on('change',function (e) {    var file = e.target.value;    if (!/.(jpg|jpeg|png|GIF|JPG|png)$/.test(file)) {      common.toast('圖片類型必須是jpeg,jpg,png中的一種');      return false;    };    fsubmit();    readAsBinaryString();  });};

function2:

function fsubmit() {  var itemImg = {};  var form=document.getElementById("form1");  console.log('form',form)  var formData=new FormData(form);  formData.append('wxdesigner_sid',$.fn.cookie('wxdesigner_sid'));  formData.append('id',$scope.masterInfo.id);  formData.append('pc','1');  var oReq = new XMLHttpRequest();  oReq.onreadystatechange=function(){    if(oReq.readyState==4){      if(oReq.status==200){        var json=JSON.parse(oReq.responseText);        console.log(json)        if(json.Success) {          itemImg = json.Data;          $scope.imgList=itemImg;          console.log($scope.imgList)          $scope.$apply();          itemImg = {};        }      }    }  };  console.log(oReq)  console.log(formData)  oReq.open("POST", common.api+"Wxdesigner/Designer/uploadworks");  oReq.send(formData);  return false;};//判斷瀏覽器是否支持FileReader接口if(typeof FileReader == 'undefined'){  //使選擇控件不可操作  file.setAttribute("disabled","disabled");}

function3:

function readAsBinaryString(){  var file = document.getElementById('photo').files[0];  console.log(file)  var reader = new FileReader();  //將文件以二進制形式讀入頁面  reader.readAsDataURL(file);  reader.onload=function(f){    $scope.masterInfo.thumblist.push(f.currentTarget.result)    console.log($scope.masterInfo)    $scope.$apply()  }}

整個圖片上傳的dom層很簡單,一個form表單加上一個觸發表單的函數(function1)。在function1中獲取到<input type="file">的點擊事件,在選擇圖片的時候會做個判斷,如果超出支持的圖片類型圍的時候做個提醒。

然后在后面調用function2和function3。

在function2中獲取form表單對象,然后創建一個FormData對象,將獲取到的form表單傳入FormData,然后append一些上傳圖片的參數。再創建一個new XMLHttpRequest對象,然后open發送XHR請求接口,send(formData)傳遞參數給接口。

到這個時候接口發送成功。

 這里的四個參數是formData中的四個參數

接口相應成功。

到這里有問題,圖片上傳成功寫入數據庫了,可是這時候需要在本地展示給用戶看但是網頁又不能直接訪問設備本地的圖片,因此我們需要FIleReader對象來對上傳的圖片文件讀取為DataURL來展示在本地。

首先New 一個FileReader對象,然后將獲取到的input file對象傳入FileReader的 readAsDataURL()方法,此方法是將文件讀取為DataURL的。

然后調用FileReader的onload方法,此方法的result會有轉換之后的url,因此我們可以獲取到此url,實際上是經過base64編碼的。然后push到圖片列表的最后

到此解決了問題,前端展示了本地的圖片并且圖片也寫入了數據庫,當頁面再次刷新的時候拿到的是數據庫中的數據

當然這里只是一個方法,移動端圖片上傳的插件比比皆是,甚至各種拖拽上傳的圖片上傳插件也很多,此處適合項目中不用引入插件的圖片上傳的簡單功能。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 昔阳县| 德昌县| 中西区| 宜君县| 忻州市| 波密县| 阿瓦提县| 陆川县| 托克托县| 涞水县| 潮州市| 巧家县| 平罗县| 南投县| 博客| 莫力| 剑河县| 绵竹市| 宁远县| 大丰市| 和政县| 陆良县| 湘乡市| 杭锦后旗| 金秀| 绩溪县| 富民县| 将乐县| 微博| 永泰县| 凤阳县| 桃源县| 蓝田县| 得荣县| 华池县| 贺州市| 余姚市| 扎赉特旗| 雅江县| 新乡市| 东港市|