国产探花免费观看_亚洲丰满少妇自慰呻吟_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.  

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

圖片精選

主站蜘蛛池模板: 五华县| 内黄县| 阳信县| 岳池县| 崇阳县| 泽州县| 镇远县| 屏南县| 东海县| 莆田市| 新沂市| 汤阴县| 昆山市| 奇台县| 东山县| 剑阁县| 永德县| 龙山县| 淮安市| 上思县| 山阴县| 长海县| 会同县| 扶绥县| 银川市| 蕉岭县| 澎湖县| 荥阳市| 建宁县| 扬中市| 乳山市| 阳江市| 牟定县| 天峻县| 青铜峡市| 彩票| 辰溪县| 武定县| 南投市| 句容市| 平阴县|