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

首頁 > 編程 > JavaScript > 正文

angularjs客戶端實現壓縮圖片文件并上傳實例

2019-11-20 12:06:09
字體:
來源:轉載
供稿:網友

主要是利用html5的canvas來進行圖片的壓縮,然后轉化為dataURL,再有dataURL轉化為Blob文件,Blob對象可以直接賦值給Formdata.

app.service('Util', function($q) {  var dataURItoBlob = function(dataURI) {    // convert base64/URLEncoded data component to raw binary data held in a string    var byteString;    if (dataURI.split(',')[0].indexOf('base64') >= 0)      byteString = atob(dataURI.split(',')[1]);    else      byteString = unescape(dataURI.split(',')[1]);    // separate out the mime component    var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];    // write the bytes of the string to a typed array    var ia = new Uint8Array(byteString.length);    for (var i = 0; i < byteString.length; i++) {      ia[i] = byteString.charCodeAt(i);    }    return new Blob([ia], {      type: mimeString    });  };  var resizeFile = function(file) {    var deferred = $q.defer();    var img = document.createElement("img");    try {      var reader = new FileReader();      reader.onload = function(e) {        img.src = e.target.result;        //resize the image using canvas        var canvas = document.createElement("canvas");        var ctx = canvas.getContext("2d");        ctx.drawImage(img, 0, 0);        var MAX_WIDTH = 800;        var MAX_HEIGHT = 800;        var width = img.width;        var height = img.height;        if (width > height) {          if (width > MAX_WIDTH) {            height *= MAX_WIDTH / width;            width = MAX_WIDTH;          }        } else {          if (height > MAX_HEIGHT) {            width *= MAX_HEIGHT / height;            height = MAX_HEIGHT;          }        }        canvas.width = width;        canvas.height = height;        var ctx = canvas.getContext("2d");        ctx.drawImage(img, 0, 0, width, height);        //change the dataUrl to blob data for uploading to server        var dataURL = canvas.toDataURL('image/jpeg');        var blob = dataURItoBlob(dataURL);        deferred.resolve(blob);      };      reader.readAsDataURL(file);    } catch (e) {      deferred.resolve(e);    }    return deferred.promise;  };  return {    resizeFile: resizeFile  };});


由于目前angualrjs暫不支持通過multiform data上傳文件,所以利用如下的代碼可以上傳formdata里的文件

app.controller('CompanyCtrl', function($http, Util) {    Util.resizeFile(input.files[0]).then(function(blob_data) {      var fd = new FormData();      fd.append("imageFile", blob_data);      $http.post('http://your.domain.com/upload', fd, {        headers: {'Content-Type': undefined },        transformRequest: angular.identity      })        .success(function(data) {          $scope.model.company_pict = data[0];        })        .error(function() {          console.log("uploaded error...")        });    }, function(err_reason) {      console.log(err_reason);    });}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 安图县| 嘉峪关市| 东明县| 荆门市| 丹东市| 沧州市| 安丘市| 水城县| 泸西县| 太湖县| 花垣县| 临泉县| 区。| 花莲市| 庆元县| 冀州市| 昌平区| 龙陵县| 瓦房店市| 龙州县| 裕民县| 全椒县| 恩施市| 西贡区| 东辽县| 郑州市| 金门县| 青冈县| 绍兴市| 南开区| 广汉市| 长垣县| 库伦旗| 右玉县| 仙居县| 兖州市| 仲巴县| 高雄市| 西藏| 会同县| 聊城市|