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

首頁 > 語言 > JavaScript > 正文

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

2024-05-06 16:22:44
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了angularjs客戶端實現壓縮圖片文件并上傳實例,本文直接給出代碼實例,需要的朋友可以參考下

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

 

 
  1. app.service('Util'function($q) { 
  2. var dataURItoBlob = function(dataURI) { 
  3. // convert base64/URLEncoded data component to raw binary data held in a string 
  4. var byteString; 
  5. if (dataURI.split(',')[0].indexOf('base64') >= 0) 
  6. byteString = atob(dataURI.split(',')[1]); 
  7. else 
  8. byteString = unescape(dataURI.split(',')[1]); 
  9.  
  10. // separate out the mime component 
  11. var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0]; 
  12.  
  13. // write the bytes of the string to a typed array 
  14. var ia = new Uint8Array(byteString.length); 
  15. for (var i = 0; i < byteString.length; i++) { 
  16. ia[i] = byteString.charCodeAt(i); 
  17.  
  18. return new Blob([ia], { 
  19. type: mimeString 
  20. }); 
  21. }; 
  22.  
  23. var resizeFile = function(file) { 
  24. var deferred = $q.defer(); 
  25. var img = document.createElement("img"); 
  26. try { 
  27. var reader = new FileReader(); 
  28. reader.onload = function(e) { 
  29. img.src = e.target.result; 
  30.  
  31. //resize the image using canvas 
  32. var canvas = document.createElement("canvas"); 
  33. var ctx = canvas.getContext("2d"); 
  34. ctx.drawImage(img, 0, 0); 
  35. var MAX_WIDTH = 800; 
  36. var MAX_HEIGHT = 800; 
  37. var width = img.width; 
  38. var height = img.height; 
  39. if (width > height) { 
  40. if (width > MAX_WIDTH) { 
  41. height *= MAX_WIDTH / width; 
  42. width = MAX_WIDTH; 
  43. else { 
  44. if (height > MAX_HEIGHT) { 
  45. width *= MAX_HEIGHT / height; 
  46. height = MAX_HEIGHT; 
  47. canvas.width = width; 
  48. canvas.height = height; 
  49. var ctx = canvas.getContext("2d"); 
  50. ctx.drawImage(img, 0, 0, width, height); 
  51.  
  52. //change the dataUrl to blob data for uploading to server 
  53. var dataURL = canvas.toDataURL('image/jpeg'); 
  54. var blob = dataURItoBlob(dataURL); 
  55.  
  56. deferred.resolve(blob); 
  57. }; 
  58. reader.readAsDataURL(file); 
  59. catch (e) { 
  60. deferred.resolve(e); 
  61. return deferred.promise; 
  62.  
  63. }; 
  64. return { 
  65. resizeFile: resizeFile 
  66. }; 
  67.  
  68. }); 

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

 

 
  1. app.controller('CompanyCtrl'function($http, Util) { 
  2.  
  3. Util.resizeFile(input.files[0]).then(function(blob_data) { 
  4. var fd = new FormData(); 
  5. fd.append("imageFile", blob_data); 
  6. $http.post('http://your.domain.com/upload', fd, { 
  7. headers: {'Content-Type': undefined }, 
  8. transformRequest: angular.identity 
  9. }) 
  10. .success(function(data) { 
  11. $scope.model.company_pict = data[0]; 
  12. }) 
  13. .error(function() { 
  14. console.log("uploaded error..."
  15. }); 
  16. }, function(err_reason) { 
  17. console.log(err_reason); 
  18. }); 
  19.  
  20.  

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 嵊泗县| 高清| 阿拉善右旗| 卢氏县| 和平区| 翼城县| 长泰县| 无为县| 大英县| 河津市| 安泽县| 白城市| 肇庆市| 青神县| 翁源县| 贵州省| 望江县| 德州市| 淮滨县| 巴林左旗| 平度市| 江城| 沈丘县| 宾川县| 卓尼县| 渑池县| 五指山市| 徐汇区| 南阳市| 松阳县| 肇庆市| 贵溪市| 十堰市| 冕宁县| 望奎县| 内黄县| 女性| 武夷山市| 剑阁县| 于田县| 桑植县|