国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

前端文件上傳(js/vue.js/axios/canvas圖片壓縮)

Luosunce / 2678人閱讀

摘要:哈哈主要還是我嫌麻煩四上傳圖片這里的頁面樣式,圖片壓縮和預覽都和上面一樣,這里我主要配置一下的,讓接口能夠成功上傳。如果想讓用戶有更好的體驗,可以對圖片進行一下壓縮和本地預覽。

一、通過Form表單提交上傳

</>復制代碼

  1. </>復制代碼

    1. HTML enctype屬性必不可少

</>復制代碼

</>復制代碼

  1. </>復制代碼

    1. </>復制代碼

      1. 上面一種方法通過表單自有屬性進行提交,看似簡單,但是也有其最大的缺點,那就是提交完畢之后直接進行了跳轉,這對于當前的絕大多數的需求來說是不能滿足的。那么我接下來介紹另一種直接利用xaj的post方法和FormData進行文件的上傳。
二、通過jQuery post請求上傳

</>復制代碼

  1. </>復制代碼

    1. HTML 多文件上傳
    2. JS

</>復制代碼

  1. (function(){
  2. $("#upload").change(function(e){
  3. let files = e.target.files;
  4. let params = new FormData();
  5. for(let i = 0; i < files.length; i++){
  6. //visit_file就是后臺用來接受的字段,因為是一個數組,所以加一個[]
  7. params.append("visit_file[]", files[i], files[i].name);
  8. }
  9. $.ajax({
  10. type: "post",
  11. url: "http://192.168.1.101:8080/springbootdemo/file/upload",
  12. data: params,
  13. processData: false,//必不可少屬性
  14. traditional: true,//必不可少屬性
  15. contentType: false,//必不可少的屬性
  16. }).success(function (data) {
  17. console.log(data);
  18. }).error(function () {
  19. console.log("上傳失敗");
  20. })
  21. })()

</>復制代碼

  1. </>復制代碼

    1. </>復制代碼

      1. 這種方法解決了上傳文件之后頁面跳轉的問題,但是如果你傳的圖片很大的時候怎么辦?接下來就是我們要說的上傳較大文件時一個優化方案。如今,為了提升用戶的體驗,不僅讓用戶再瀏覽時給用戶極致的體驗,還要在上傳時感受不到卡頓的現象,這對于后端來說就做不了了,只能交給前端。下面我們介紹一下這種優化方案。
三、本地預覽,Canvas圖片壓縮,轉blob二進制文件

</>復制代碼

  1. </>復制代碼

    1. HTML 多文件上傳
    2. JS

</>復制代碼

  1. (function(){
  2. $("#upload").change(function(e){
  3. let files = e.target.files;
  4. let params = new FormData();
  5. for(let i = 0; i < files.length; i++){
  6. //visit_file就是后臺用來接受的字段,因為是一個數組,所以加一個[]
  7. params.append("visit_file[]", files[i], files[i].name);
  8. }
  9. //圖片預覽地址數組
  10. let previewArr = previewImage(files);
  11. for(let i = 0 ; i < previewArr.length; i++){
  12. }
  13. }
  14. //上傳圖片 壓縮過的二進制文件只能單張上傳處理,我試過多上同時上傳失敗了,你們也可以試試,也許可以找到方法
  15. function uploadImage(params){
  16. $.ajax({
  17. type: "post",
  18. url: "http://192.168.1.101:8080/springbootdemo/file/upload",
  19. data: params,
  20. processData: false,//必不可少屬性
  21. traditional: true,//必不可少屬性
  22. contentType: false,//必不可少的屬性
  23. }).success(function (data) {
  24. console.log(data);
  25. }).error(function () {
  26. console.log("上傳失敗");
  27. })
  28. }
  29. //圖片預覽
  30. function previewImage(files){
  31. let previewsArr = [];
  32. for(let i = 0; i < files.length; i++){
  33. let fileReader = new FileReader();
  34. fileReader.readAsDataURL(files[i]);
  35. fileReader.onloaded = () => {
  36. //數組放入獲取的base64本地圖片地址
  37. previewsArr.push(fileReader.result);
  38. }
  39. }
  40. return previewsArr;
  41. }
  42. //圖片壓縮
  43. function compressImage(base64URL){
  44. let img = new Image();
  45. let canvas = document.createElement("canvas");
  46. let context = canvas.getContext("2d");
  47. img.src = base64URL;
  48. img.onload = () => {
  49. // 圖片原始尺寸
  50. var originWidth = img.width;
  51. var originHeight = img.height;
  52. // 最大尺寸限制
  53. let maxWidth = 400,
  54. maxHeight = 400;
  55. // 目標尺寸
  56. let targetWidth = originWidth,
  57. targetHeight = originHeight;
  58. // 圖片尺寸超過400x400的限制
  59. if (originWidth > maxWidth || originHeight > maxHeight) {
  60. if (originWidth/originHeight > maxWidth/maxHeight) {
  61. //更寬,按照寬度限定尺寸
  62. targetWidth = maxWidth;
  63. targetHeight = Math.round(maxWidth * (originHeight / originWidth));
  64. }else{
  65. targetHeight = maxHeight;
  66. targetWidth = Math.round(maxHeight * (originWidth / originHeight));
  67. }
  68. }
  69. // canvas對圖片進行縮放
  70. canvas.width = targetWidth;
  71. canvas.height = targetHeight;
  72. // 清除畫布
  73. context.clearRect(0, 0, targetWidth, targetHeight);
  74. // 圖片壓縮
  75. context.drawImage(img, 0, 0, targetWidth, targetHeight);
  76. //canvas直接轉blob二進制文件,但是大部分瀏覽器不支持
  77. // canvas.toBlob(function (blob) {
  78. // console.log(blob)
  79. // resolve(blob)
  80. // }, "image/png");
  81. let base64Data = canvas.toDataURL("image/png", 0.92);
  82. let blob = dataURItoBlob(base64Data);
  83. //上傳圖片
  84. let params = new FormaData();
  85. params.append("visit_file", blob, "cavas.png");
  86. uploadImage(params);
  87. }
  88. }
  89. /**
  90. * base64 轉二進制文件
  91. * @param {*} base64Data
  92. */
  93. function dataURItoBlob(base64Data) {
  94. var bytes = window.atob(base64Data.split(",")[1]); //去掉url的頭,并轉換為byte
  95. //處理異常,將ascii碼小于0的轉換為大于0
  96. var ab = new ArrayBuffer(bytes.length);
  97. var ia = new Uint8Array(ab);
  98. for (var i = 0; i < bytes.length; i++) {
  99. ia[i] = bytes.charCodeAt(i);
  100. }
  101. return new Blob([ab], {
  102. type: "image/png"
  103. });
  104. }
  105. })()

</>復制代碼

  1. </>復制代碼

    1. </>復制代碼

      1. </>復制代碼

        1. 這里通過FileReader獲取本地base64文件,然后通過canvas對圖片進行壓縮,最終轉為二進制的blob文件,傳到服務器上。這里還可以做的更好,利用promise,對壓縮功能進行返回,不必在壓縮函內進行調用上傳,降低耦合度。這里為了大家理解,我就沒有分開。哈哈~~主要還是我嫌麻煩...
四、Vue+axios上傳圖片

</>復制代碼

  1. </>復制代碼

    1. </>復制代碼

      1. 這里的頁面樣式,圖片壓縮和預覽都和上面一樣,這里我主要配置一下axois的http,讓post接口能夠成功上傳。

</>復制代碼

  1. /**
  2. *
  3. * @param {路由} url
  4. * @param {路由參數} params
  5. * @param {文件數據} body
  6. */
  7. upload(url, params = "", body = {}) {
  8. let path = config.host + url + params;
  9. // console.log(body);
  10. return axios({
  11. method: "POST",
  12. url: path,
  13. data: body,
  14. processData: false, //必不可少參數
  15. traditional: true, //比不可少參數
  16. contentType: false,//比不可少參數
  17. headers: {
  18. "token": localStorage["token"],
  19. "originno": config.originno,
  20. "Content-Type": false
  21. }
  22. }).then(
  23. res => res
  24. ).catch((error) => {
  25. console.log(error);
  26. })
  27. }

</>復制代碼

  1. </>復制代碼

    1. </>復制代碼

      1. 我也是最近在做項目時遇到需求,當時使用的就是vue+axois,怎么提交怎么報錯,最后發現就是文件沒有傳過去,只要配置上那三個必不可少的參數,就可以上傳成功。如果想讓用戶有更好的體驗,可以對圖片進行一下壓縮和本地預覽。還可以做的更好,如果大家有什么問題可以留言告訴我!也可以在我的基礎上進行更多的擴展。
        謝謝大家能夠讀完我的這篇文章!

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/96320.html

相關文章

  • 前端文件上傳(js/vue.js/axios/canvas圖片壓縮)

    摘要:哈哈主要還是我嫌麻煩四上傳圖片這里的頁面樣式,圖片壓縮和預覽都和上面一樣,這里我主要配置一下的,讓接口能夠成功上傳。如果想讓用戶有更好的體驗,可以對圖片進行一下壓縮和本地預覽。 一、通過Form表單提交上傳 HTML enctype屬性必不可少 上面一種方法通過表單自有屬性進行提交,看似簡單,但是也有其最大的缺點,那就是提交...

    Lsnsh 評論0 收藏0
  • 結合Vue.js前端壓縮圖片方案

    摘要:圖片文件大小減小后,上傳速度自然會提升,在同樣的并發下,后臺處理的速度也會得到提升,用戶體驗得到提升。 這是一個很簡單的方案。嗯,是真的。 為什么要這么做? 在移動Web蓬勃發展的今天,有太多太多的應用需要讓用戶在移動Web上傳圖片文件了,正因如此,我們有些困難必須去攻克: 低網速下上傳進度緩慢,用戶體驗差 高并發下,后臺處理較大的上傳文件壓力大 或許有更多... 在攻克上面的一些...

    sutaking 評論0 收藏0
  • input上傳圖片壓縮vue前端js

    摘要:大家好,我是云皓,話不多說,直入正題,獲取上傳文件自行獲取,也可通過的組件來獲取,轉化為文件,壓縮,轉換為文件,上傳。 大家好,我是云皓,話不多說,直入正題 1,獲取input上傳file文件(自行獲取,也可通過vant的upload組件來獲取)2,轉化為base64文件3,壓縮4,轉換為blob文件5,上傳。下面直接上代碼(本代碼段是用用在vue&vantui 里面, 原理都在,可根...

    andot 評論0 收藏0
  • 說一說前端文件壓縮

    摘要:因為異步壓縮的時候我們上傳的文件的數量不定,所以上面需要使用關鍵字來修飾壓縮過程。而下面的壓縮過程的實現,最終返回一個對象,當壓縮過程已完成后,完整的生成的文件存于其中。 基于JSZip的前端文件壓縮 1. 簡介: 這段時間,項目需要做一個這樣的功能:客戶端在上傳文件的時候(具體文件類型),需要對文件進行壓縮再上傳以節省帶寬和服務器端資源,完成這個功能,我們選擇了GitHub上的JSZ...

    Ververica 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<