栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > Web开发 > JavaScript

angularjs客户端实现压缩图片文件并上传实例

JavaScript 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

angularjs客户端实现压缩图片文件并上传实例

主要是利用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);
    });


}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/101732.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号