vue用阿裡雲oss上傳圖片使用分片上傳只能上傳100kb以內的解決辦法

来源:https://www.cnblogs.com/beileixinqing/archive/2018/01/04/8194636.html
-Advertisement-
Play Games

首先,vue和阿裡雲oss上傳圖片結合參考了 這位朋友的 https://www.jianshu.com/p/645f63745abd 文章,成功的解決了我用阿裡雲oss上傳圖片前的一頭霧水。 該大神文章里有寫github地址,裡面的2.0分支採用vue2.0實現,只不過這個上傳圖片用的是分片上傳, ...


首先,vue和阿裡雲oss上傳圖片結合參考了 這位朋友的 https://www.jianshu.com/p/645f63745abd 文章,成功的解決了我用阿裡雲oss上傳圖片前的一頭霧水。

該大神文章里有寫github地址,裡面的2.0分支採用vue2.0實現,只不過這個上傳圖片用的是分片上傳,即斷點續傳,分片上傳由於一片是以100kb為起始的,所以當圖片大小小於100kb的時候不分片,可以正常上傳,當大於100k的時候,會報錯如下:

One or more of the specified parts could not be found or the specified entit

當報這個錯誤的時候,請看看阿裡雲自己的後臺有沒有按文檔設置

文檔地址:https://help.aliyun.com/document_detail/32069.htm

exopose header 要設置為 ETag

當成功設置之後,大於100k的就可以成功上傳了,但是返回的數據和小於100k的不太一樣,

大於100k之後沒有直接返回url,只有在res.requestUrls 里可以看到對應的url ,但是後面還會有一個分片上傳的id。

返回數據對應如下:

小於100k:

 

大於100k時:

 

看了官方文檔有關分片上傳的方法,表示並沒有看懂如何把分片集合上傳,文檔在此,https://help.aliyun.com/document_detail/31850.html  如有大神看懂,還請多多指教!!不勝感激!!

 

最終我用截取字元串截取到大於100k的圖片的url,實現客戶端預覽。

我的最終代碼如下(這是vue中綁定在 input file上的一個函數):

onFileChange(e) {
        const _this = this;
        axios({
          url: "/oss/get_token",
          method: 'GET',
          headers: {'w-auth-token': this.token}
        }).then((res) => {
          var client = new OSS.Wrapper({
            accessKeyId: res.data.accessKeyId,
            accessKeySecret: res.data.accessKeySecret,
            stsToken: res.data.securityToken,
            region: _this.region,
            bucket: _this.bucket
          });
          let files = e.target.files || e.dataTransfer.files;
          if (!files.length)return;
          if (files.length) {
            const fileLen = files.length;
            const currentImgLength=_this.imgList.length;
            const restLength=10-currentImgLength;
            if(currentImgLength>10){
              Toast('圖片最多上傳十張');
            }else{
              if(fileLen<=restLength){
                for (let i = 0; i < fileLen; i++) {
                  const file = files[i];
                  let date = new Date();
                  let path="wap/life/release/"+this.id+"/"+date.getFullYear()+(date.getMonth()+1)+date.getDate()+date.getHours()+date.getMinutes()+date.getSeconds()+date.getMilliseconds()+ '.' + file.name.split('.').pop();
                  let size=file.size;
                  if(Math.round(size/(1024*1024)*100)/100<=2){
                    client.multipartUpload(path, file).then((results) => {
                        if(size>=100*1024){
                          _this.imgList.push(results.res.requestUrls[0].split("?")[0]);
                        }else{
                          _this.imgList.push(results.url);
                        }
                      console.log(results);
                    }).catch((err) => {
                    Toast('上傳圖片失敗,請重試!');
                    });
                  }else{
                    Toast('上傳圖片不能超過2M,請重試!');
                  }
                }
              }else{
                Toast('圖片最多上傳十張');
              }
            }
          }
        });

      },
<div class="uploadBox">
          <!--<input type="file" accept="image/gif,image/jpeg,image/jpg,image/png,image/svg" multiple @change="onFileChange">-->
          <input type="file" accept="image/*" multiple @change="onFileChange">
          <div>
            <svg class="icon-jia icon" aria-hidden="true">
              <use xlink:href="#icon-jia"></use>
            </svg>
            <p>添加照片</p>
          </div>
</div>

 

這個上傳圖片的方法實現阿裡雲多圖上傳,圖片大小限制,調用後臺返回的介面  

/oss/get_token 

獲得相應的secret。運用了mint-ui組件。

我把一個upload上傳組件放在了我的github:打開vue+阿裡雲oss上傳組件


 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 最近在工作中,發現在IE8下JSON.stringify()自動將中文轉譯為unicode編碼,原本選擇的中文字元,傳到後臺變為了unicode編碼,即\u****的形式。查找資料後發現,與標準的JSON.stringify()不同,IE8內置的JSON.stringify()會自動將編碼從utf- ...
  • 寫在前面 兩欄佈局是指頁面佈局由主欄和邊欄組成,是許多網頁的佈局方式,一般使用CSS去實現兩欄佈局。 實現兩欄佈局的方式有多種,這裡採用四種比較常見的實現方式。主要是流體佈局(liquid layouts),凝膠佈局(Jello layouts),絕對佈局(absolute layouts),表格布 ...
  • 使用vue-cli 建立項目 package.json 安裝好sass之後,想要在組件中使用全局變數 sass-resources-loader 安裝方法 步驟1:npm i sass-resources-loader --save-dev 步驟2:修改build/utils.js 在以下代碼的 上 ...
  • 排序演算法主要用在元素的數組排序,常見的排序演算法有冒泡排序、選擇排序、插入排序、希爾排序、快速排序、歸併排序等。這些排序演算法都可以用JavaScript實現。下麵的排序演算法都假設是從小到大進行排序,從大到小可以相應進行轉化。 冒泡排序 冒泡排序的基本思想是從頭遍歷要排序的數組,比較相鄰兩個數,如果前面 ...
  • 最簡單的方式就是創建一個文本文檔,然後將.txt尾碼改為.html或者htm。 完成上面的步驟會創建一個完全空白的網頁,下麵填充一點內容,代碼實例如下: 上面的代碼會創建一個顯示"螞蟻部落"的網頁。 網頁的具體結構和元素組成會在後面的章節分步介紹。 http://www.softwhy.com/ar ...
  • 一.背景介紹: css不是一種真正意義上的編程語言,不具有編程語言的變數、迴圈、遍歷和繼承等特性。 為瞭解決css的這些缺點,能夠對css進行預處理的"中間語言"就產生了,以此來實現某些編程特性。 也就是在編寫中間語言過程中,可以使用編程方式和思維,中間語言不能直接被瀏覽器所解析。 最後將這個中間語 ...
  • 一.正則表達式基本介紹: 實際應用中,經常需要按照某些規則去操作字元串,正則表達式恰好是制定這些規則的利器。 正則表達的英文全程是regular expression,正如它的名字,可以將它分為兩個部分來理解: (1).第一部分是規則(regular),用來約束各個字元的語義。例如點(.)可以表示任 ...
  • 一.jQuery是什麼: 它是一個輕量級的JavaScript庫。所以遵循JavaScript語法,並具有自身的特點。 二.jQuery的優勢: (1).具有良好的瀏覽器相容性,所有主流瀏覽器對jQuery有著良好支持。 (2).實現了腳本與頁面分離,頁面更加清晰,也有利於搜索引擎優化。 (3).高 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...