整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          vue 做大文件切片上傳

          vue 做大文件切片上傳

          "Vue實現大文件切片上傳:輕松處理大型文件上傳難題"

          ## 引言

          在現代Web應用中,尤其是涉及大量數據交換的場景下,如云存儲、視頻分享等,大文件上傳成為了開發者經常面臨的技術挑戰。Vue.js作為一款漸進式JavaScript框架,其強大的靈活性和豐富的生態為我們解決此類問題提供了可能。本文將詳細解析如何在Vue項目中實現大文件的切片上傳,通過分塊傳輸優化用戶體驗,確保數據完整性和穩定性。

          ## 一、理解大文件切片上傳原理

          **1.1 大文件切片上傳概念**

          大文件切片上傳是指將一個大文件分割成多個小塊進行上傳,每個小塊獨立上傳至服務器,并在服務器端重新組裝還原。這樣做的好處在于可以降低單次上傳失敗對整個上傳任務的影響,同時可利用瀏覽器的并發能力提高上傳速度。

          **1.2 切片策略與重組**

          在實際操作中,我們需要根據實際情況設置合理的切片大小(一般為幾MB),然后對文件進行切片操作,并記錄每一片的元信息(如偏移量、大小等)。服務器端接收到所有切片后,按照元信息進行文件重組。

          ## 二、Vue環境下的大文件切片上傳實現步驟

          **2.1 配置Vue項目**

          首先,確保你的Vue項目已經創建并安裝了必要的依賴,如`axios`用于發送HTTP請求,`file-saver`或`Blob`用于處理文件。

          ```bash

          npm install axios file-saver

          ```

          **2.2 文件選擇與切片處理**

          在HTML部分,我們創建一個文件輸入元素讓用戶選擇文件:

          ```html

          <div id="app">

          <input type="file" @change="handleFileChange" />

          </div>

          ```

          然后,在Vue實例的方法中,處理文件選擇事件并對文件進行切片:

          ```javascript

          export default {

          methods: {

          handleFileChange(event) {

          const file=event.target.files[0];

          this.sliceAndUpload(file);

          },


          sliceAndUpload(file) {

          const blockSize=1024 * 1024 * 5; // 設置切片大小為5MB

          const chunks=Math.ceil(file.size / blockSize);

          for (let i=0; i < chunks; i++) {

          const start=i * blockSize;

          const end=(i + 1) * blockSize >=file.size ? file.size : (i + 1) * blockSize;

          const chunk=file.slice(start, end);

          this.uploadChunk(chunk, i, chunks);

          }

          },

          },

          };

          ```

          **2.3 分塊上傳與進度跟蹤**

          接下來編寫`uploadChunk`方法,使用`axios`進行分塊上傳,并添加進度反饋功能:

          ```javascript

          methods: {

          async uploadChunk(chunk, index, totalChunks) {

          const formData=new FormData();

          formData.append('chunk', chunk);

          formData.append('index', index);

          formData.append('totalChunks', totalChunks);

          try {

          const response=await axios.post('/api/upload/chunk', formData, {

          onUploadProgress: progressEvent=> {

          const percentCompleted=Math.round((progressEvent.loaded * 100) / progressEvent.total);

          console.log(`Chunk ${index + 1}/${totalChunks} uploaded: ${percentCompleted}%`);

          },

          });

          // 在這里處理服務器返回的結果,確認切片上傳成功

          } catch (error) {

          console.error('Chunk upload failed:', error);

          }

          },

          },

          ```

          **2.4 服務器端切片合并**

          最后,你需要在服務器端編寫邏輯接收這些切片并進行合并。這通常涉及到在服務器端存儲切片、校驗完整性以及最終合并為原文件。

          ## 三、優化與拓展

          - **錯誤重試機制**:當某一塊上傳失敗時,應具備自動重試的能力。

          - **斷點續傳**:保存已上傳切片的信息,支持用戶在中斷后從上次中斷處繼續上傳。

          - **客戶端MD5校驗**:計算每片切片的MD5值,與服務器端對比,確保數據完整性。

          總結來說,Vue實現大文件切片上傳不僅提高了上傳效率,還提升了用戶體驗。希望這篇教程能幫助你在實際開發中應對大文件上傳的需求,如有任何疑問,歡迎留言討論!

          注:以上代碼僅為示例,具體實現需結合您的業務場景及服務器接口進行調整。同時,請務必遵守相關法律法規,保護用戶隱私與數據安全。

          文件上傳的處理方法——切片上傳,大文件切片上傳的處理方法,大文件切片上傳的解決方案,大文件切片上傳的思路,大文件切片上傳的源碼,大文件切片上傳的實例,大文件分片上傳,大文件分塊上傳,大文件加密上傳,文件夾上傳,


          前端用了HTML,VUE2,VUE3,

          后端用了ASP.NET,.NET Core.NET MVC,IDE用了Visual Studio 2010,Visual Studio 2013,Visual Studio 2022,因為新項目和老項目都用了兩種IDE。

          要求能夠在網頁上面上傳文件夾,文件夾里面大約有1萬多個文件,有大有小,大的有1G~10G,小的有幾MB,

          要求支持斷點續傳,支持進度信息離線存儲,用戶可能傳一半沒有傳完,下班了,明天上班后繼續上傳,電腦晚上到點需要關機,支持加密傳輸,支持國密加密算法SM4,

          對于大文件的處理,無論是用戶端還是服務端,如果一次性進行讀取發送、接收都是不可取,很容易導致內存問題。所以對于大文件上傳,采用切塊分段上傳

          從上傳的效率來看,利用多線程并發上傳能夠達到最大效率。

          文件上傳頁面的前端可以選擇使用一些比較好用的上傳組件,例如百度的開源組件WebUploader,這些組件基本能滿足文件上傳的一些日常所需功能,如異步上傳文件,文件夾,拖拽式上傳,黏貼上傳,上傳進度監控,文件縮略圖,甚至是大文件斷點續傳,大文件秒傳。

          在web項目中上傳文件夾現在已經成為了一個主流的需求。在OA,或者企業ERP系統中都有類似的需求。上傳文件夾并且保留層級結構能夠對用戶行成很好的引導,用戶使用起來也更方便。能夠提供更高級的應用支撐。

          該項目核心就是文件分塊上傳。前后端要高度配合,需要雙方約定好一些數據,才能完成大文件分塊,我們在項目中要重點解決的以下問題。

          * 如何分片;

          * 如何合成一個文件;

          * 中斷了從哪個分片開始。

          如何分,利用強大的js庫,來減輕我們的工作,市場上已經能有關于大文件分塊的輪子,雖然程序員的天性曾迫使我重新造輪子。但是因為時間的關系還有工作的關系,我只能罷休了。最后我選擇了百度的WebUploader來實現前端所需。

          如何合,在合之前,我們還得先解決一個問題,我們如何區分分塊所屬那個文件的。剛開始的時候,我是采用了前端生成了唯一uuid來做文件的標志,在每個分片請求上帶上。不過后來在做秒傳的時候我放棄了,采用了Md5來維護分塊和文件關系。

          在服務端合并文件,和記錄分塊的問題,在這方面其實行業已經給了很好的解決方案了。參考迅雷,你會發現,每次下載中的時候,都會有兩個文件,一個文件主體,另外一個就是文件臨時文件,臨時文件存儲著每個分塊對應字節位的狀態。

          這些都是需要前后端密切聯系才能做好,前端需要根據固定大小對文件進行分片,并且請求中要帶上分片序號和大小。前端發送請求順利到達后臺后,服務器只需要按照請求數據中給的分片序號和每片分塊大小(分片大小是固定且一樣的)算出開始位置,與讀取到的文件片段數據,寫入文件即可。

          為了便于開發,我 將服務端的業務邏輯進行了如下劃分,分成初始化,塊處理,文件上傳完畢等。

          斷點續傳,就是在文件上傳的過程中發生了中斷,人為因素(暫停)或者不可抗力(斷網或者網絡差)導致了文件上傳到一半失敗了。然后在環境恢復的時候,重新上傳該文件,而不至于是從新開始上傳的。

          斷點續傳的功能是基于分塊上傳來實現的,把一個大文件分成很多個小塊,服務端能夠把每個上傳成功的分塊都落地下來,客戶端在上傳文件開始時調用接口快速驗證,條件選擇跳過某個分塊。

          實現原理,就是在每個文件上傳前,就獲取到文件MD5取值,在上傳文件前調用接口,如果獲取的文件狀態是未完成,則返回所有的還沒上傳的分塊的編號,然后前端進行條件篩算出哪些沒上傳的分塊,然后進行上傳。

          當接收到文件塊后就可以直接寫入到服務器的文件中。


          最新版本:6.5.40

          在線代碼:https://gitee.com/xproer/up6-asp-net/tree/6.5.40/

          安裝.NET Framework 4.7.2

          https://dotnet.microsoft.com/en-us/download/dotnet-framework/net472


          框架選擇4.7.2




          添加3rd引用



          編譯項目


          NOSQL



          NOSQL無需任何配置可直接訪問頁面進行測試

          SQL

          使用IIS

          大文件上傳測試推薦使用IIS以獲取更高性能。

          使用IIS Express

          小文件上傳測試可以使用IIS Express

          創建數據庫

          配置數據庫連接信息


          檢查數據庫配置



          訪問頁面進行測試


          相關參考:

          文件保存位置,


          源碼工程文檔:https://drive.weixin.qq.com/s?k=ACoAYgezAAw1dWofra

          源碼報價單:https://drive.weixin.qq.com/s?k=ACoAYgezAAwoiul8gl


          OEM版報價單:https://drive.weixin.qq.com/s?k=ACoAYgezAAwuzp4W0a

          產品源代碼:https://drive.weixin.qq.com/s?k=ACoAYgezAAwbdKCskc
          授權生成器:https://drive.weixin.qq.com/s?k=ACoAYgezAAwTIcFph1

          、網頁切片

          定義:簡單理解將網頁圖片切分為一些小碎片的過程,目的是為了提升網頁瀏覽的流暢性。

          切片創建非常簡單,在裁剪工具箱中。

          鼠標繪制矩形選框范圍會成為“用戶切片”,而范圍外的會自動切分,成為“自動切片”

          自動切片可以隱藏,也可以通過提升成為“用戶切片”

          其他內容與裁剪及選框工具差不多。

          如果圖像包含參考線,可以基于參考線創建切片

          如果切片處于隱藏狀態:視圖-顯示-切片,可以顯示切片。


          • 創建出的切片可以復制、組合、刪除等操作,以便得到合適的切片。

          復制:按住Alt鍵拖到切片;

          組合:用切片選擇工具選擇多個切片(按住Shift),右鍵執行,組合切片。

          刪除:用切片選擇工具選擇切片后,鼠標右鍵刪除切片,也可以用Delete或Backspace鍵來刪除切片。刪除切片后會重新自動生成切片以填充文檔區域。

          清除全部切片:視圖>清除切片。

          鎖定切片:鎖定后無法對切片移動、縮放或其他更改。執行:視圖>鎖定切片。


          自動切片無法進行優化設置,所以我們有時候需要提升為用戶切片。

          切片的導出:執行“文件>導出>存儲為Web所用格式(舊版)”,在彈出的窗口中設置“優化格式”為GIF,單擊存儲完成導出。


          3、網頁翻轉按鈕

          網頁上不同狀態下,呈現出不同的顏色或者樣式的按鈕,方便用戶了解當前操作狀態,這就是翻轉按鈕。

          要創建翻轉按鈕至少需要兩個圖像,一個是用于表示正常狀態的圖像,另一個則用于表示處于更改狀態的圖像。

          舉例:

          素材1

          實例33.1-右上角創建播放器翻轉按鈕效果

          應用矩形工具+橢圓工具+鋼筆工具,繪制模式為形狀,創建視頻播放器翻轉按鈕效果

          網頁中可播放的視頻文件,如果不被明確標注出來很可能被用戶忽略,所以我們增加翻轉按鈕,當用戶將光標移動到可播放的視頻上時,視頻縮略圖呈現為播放器效果。

          4、Web圖形輸出

          重要內容:再重復一次

          切片的導出:執行“文件>導出>存儲為Web所用格式(舊版)”,在彈出的窗口中設置“優化格式”為GIF,單擊存儲完成導出。


          • 設置不同的存儲格式

          不同的格式的圖像文件其質量與大小也不同。

          可供選擇的Web圖像的優化格式包括:GIF、JPEG、PNG-8、PNG-24、WBMP


          GIF:網頁最常用的格式。可顯示256種顏色,參數設置較多,重要的進行解釋

          顏色深度算法、顏色:可選擇、數值越大,顏色越接近原圖像

          交錯:正在下載文件時,在瀏覽器中顯示圖像的低分辨率版本。

          損耗:通常設置5~10,可減少文件大小5~40%,大于10,圖像的質量也會降低。


          JPEG:是一種比較成熟的有壓縮格式的圖像格式之一,雖然會丟失部分數據,但人眼幾乎無法分別差異。

          壓縮品質:越大,圖像細節越豐富,但文件也越大。

          模糊:數值越大,模糊效果越明顯,但會減少圖像的大小,最好不要超過0.5

          雜邊:為原始圖像的透明像素設置一個填充顏色。


          PNG-8:專門為Web開放的,支持244位圖像并產生無鋸齒狀的透明背景。


          PNG-24:可以保留多達256個透明度級別,適合于壓縮連續色調圖像(),但生成的文件比JPEG格式大得多。


          WBMP:用于優化移動設備的標注格式,只支持1位顏色,只包含黑白像素。

          5、導出為Zoomify

          執行“文件>導出>Zoomify”,用于導出高分辨的JPEG文件和HTML文件,然后可以將這些文件上載到Web服務器上,以便查看著平移和縮放該圖像的更多細節。適用于在需要商品細節進行展示時使用。

          可能是要上傳吧。未上傳測試預覽效果失敗,可能是我的操作問題,有懂得的大神請指點下。

          這章節內容都是干貨,現在不是我的重點,后續從事時再單獨研究。

          感謝大家的關注及閱讀。

          下節學習3D立體效果,應該很有趣。


          主站蜘蛛池模板: 亚洲乱色熟女一区二区三区丝袜 | 一本大道东京热无码一区| 久久亚洲色一区二区三区 | 国产一区二区好的精华液| 日韩一区二区三区在线观看| 国产激情无码一区二区app| 一区免费在线观看| 亚州AV综合色区无码一区| 99精品高清视频一区二区| 国产综合精品一区二区三区| 无码一区二区三区AV免费| 日本一区二区不卡在线| 久久精品一区二区三区资源网| 日韩在线视频一区二区三区| 日本一区午夜艳熟免费| 精品一区二区三区电影| 亚洲乱码一区二区三区国产精品 | 国产精品日本一区二区不卡视频 | 国产成人欧美一区二区三区| 国产在线精品一区二区不卡| 一区二区三区无码高清视频| 无码人妻一区二区三区兔费| 日韩精品无码一区二区三区AV| 国产电影一区二区| 精品视频在线观看你懂的一区| 成人免费视频一区二区三区| 国产综合一区二区| 国产av成人一区二区三区| 国产午夜精品一区二区三区极品 | 精品久久国产一区二区三区香蕉| 亚洲国产精品自在线一区二区 | 红桃AV一区二区三区在线无码AV| 国产在线精品一区二区| 无码人妻一区二区三区免费| 久久人妻无码一区二区| 亚洲a∨无码一区二区| 国精产品一区一区三区MBA下载| 亚洲国产情侣一区二区三区| 无码人妻AⅤ一区二区三区| 好看的电影网站亚洲一区| 亚洲一区二区三区在线观看精品中文|