nuxt3 + vue3 分片上傳組件全解析(大文件分片上傳)

本文將詳細介紹一個基于 Vue.js 的分片上傳組件的設計與實現,該組件支持大文件分片上傳進度顯示等功能。

組件概述

這個上傳組件主要包含以下功能:

  1. 支持大文件分片上傳(默認5MB一個分片)
  2. 支持文件哈希計算,用于文件唯一標識
  3. 顯示上傳進度(整體和單個文件)
  4. 支持自定義UI樣式
  5. 提供完整的文件管理功能(添加、刪除)
  6. 后端支持分片合并和臨時存儲

組件結構

組件由三個主要文件組成:

  1. Uploader.vue - 主組件
  2. fileChunk.ts - 文件分片和哈希計算工具
  3. uploader.post.ts - 后端API處理
  4. uploaderImg.vue - 調用示例

核心功能實現

1. 文件分片處理

fileChunk.ts 中,我們實現了文件分片功能:

import SparkMD5 from 'spark-md5';
/*** 創建文件分片* @param file 文件對象* @param chunkSize 每個分片的大小 (字節)*/
export const createFileChunk = (file: File, chunkSize: number) => {const chunks = []let current = 0while (current < file.size) {const end = Math.min(current + chunkSize, file.size)const chunk = file.slice(current, end)chunks.push({file: chunk,index: chunks.length,start: current,end: end,size: end - current,})current = end}return chunks
}/*** 計算文件hash (使用SparkMD5)* @param file 文件對象*/
export const calculateHash = (file: File): Promise<string> => {return new Promise((resolve) => {const spark = new SparkMD5.ArrayBuffer()const reader = new FileReader()const chunkSize = 2 * 1024 * 1024 // 2MBconst chunks = Math.ceil(file.size / chunkSize)let currentChunk = 0reader.onload = (e) => {spark.append(e.target?.result as ArrayBuffer)currentChunk++if (currentChunk < chunks) {loadNext()} else {resolve(spark.end())}}const loadNext = () => {const start = currentChunk * chunkSizeconst end = Math.min(start + chunkSize, file.size)const chunk = file.slice(start, end)reader.readAsArrayBuffer(chunk)}loadNext()})
}

這個方法將大文件分割成指定大小的多個小分片,便于上傳和管理。

2. 文件哈希計算

使用 SparkMD5 庫計算文件哈希,用于唯一標識文件:

export const calculateHash = (file: File): Promise<string> => {return new Promise((resolve) => {const spark = new SparkMD5.ArrayBuffer()const reader 

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/85695.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/85695.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/85695.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

正則表達式與C++

轉自個人博客 1. 概述 1.1 正則表達式概述 正則表達式&#xff08;Regular Expressions&#xff0c;簡稱 regex&#xff09;是用于匹配文本模式的一種特殊字符序列&#xff0c;其可以用一系列字符來表示出不同文本的對應模式。正則表達式的應用范圍十分廣泛&#xff0c;包括驗…

OpenCV CUDA模塊設備層-----在 GPU上計算反雙曲正切函數atanh()

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 對輸入的 uchar1 像素值&#xff08;范圍 [0, 255]&#xff09;&#xff0c;先歸一化到 [0.0, 1.0] 浮點區間&#xff0c;然后計算其 反雙曲正切…

搶占西南產業高地:入駐成都芯谷金融中心文化科技產業園的價值

入駐成都芯谷金融中心文化科技產業園&#xff0c;對企業而言具有顯著的戰略價值&#xff0c;主要體現在以下幾個方面&#xff1a; 產業聚集效應與協同發展 產業鏈完善&#xff1a;成都芯谷聚焦集成電路、新型顯示、人工智能等核心產業&#xff0c;入駐企業可享受完善的產業鏈…

領域驅動設計(DDD)【2】之項目啟動與DDD基本開發流程

文章目錄 一 項目背景與目標二 核心需求分析初步需求詳細分析需求總結表 三 DDD核心概念與開發流程領域和領域專家領域驅動設計開發流程 四 潛在擴展需求 一 項目背景與目標 項目定位 開發基于SaaS的企業管理系統&#xff0c;聚焦軟件服務企業的細分市場&#xff0c;功能需求包…

深度融合數智化,百勝軟件聯合華為云加速零售行業轉型升級

當前&#xff0c;企業數字化轉型縱深推進&#xff0c;滿足企業數智化全階段、全場景的需求變得尤為關鍵。為此&#xff0c;華為云攜手上萬家伙伴共同發起第三屆828 B2B企業節&#xff0c;依托云底座為企業數智化供需“架橋”“鋪路”&#xff0c;加速企業智改數轉&#xff0c;助…

《HTTP權威指南》 第4章 連接管理

帶著問題學習&#xff08;通常是面試考點&#xff09; HTTP是如何使用TCP連接的TCP連接的時延、瓶頸及存在的障礙HTTP的優化&#xff0c;包括并行連接、keep-alive&#xff08;持久連接&#xff09;和管道化連接管理連接時應該和不應該做的事 TCP連接 TCP的數據通過IP分組&am…

StartUML入門級使用教程——畫Class類圖

一、破解安裝StartUML StarUML建模工具最新版破解安裝詳細教程https://blog.csdn.net/m0_74146638/article/details/148709643?spm1001.2014.3001.5502 二、類圖實戰 1.主界面 ? 默認打開starUML后&#xff0c;會默認進入類圖模式&#xff0c;各模塊區域功能如下&#x…

中科億海微SoM模組——FPGA+DSP核心板

FPGADSP核心板是基于中科億海微EQ6HL130型FPGA芯片搭配國產DSP開發的高性能核心板卡。對外接口采取郵票孔連接方式&#xff0c;可以極大提高信號傳輸質量和焊接后的機械強度。核心板卡的系統框圖如下圖所示。 圖 FPGADSP核心板系統框圖 FPGA采用中科億海微136K LUT資源EQ6HL130…

CentOS 7 虛擬機網絡配置異常 典型問題:啟動了NetworkManager但是network無法啟動

問題背景 在 VMware 虛擬機中使用 CentOS 7 時&#xff0c;出現以下網絡問題&#xff1a; 命令行重啟網絡服務失敗&#xff0c;提示 RTNETLINK answers: File exists 等沖突錯誤圖形界面網絡設置無法打開&#xff0c;提示需要啟動 NetworkManager網卡 ens33 無法獲取 IPv4 地…

細節/數學/滑動窗口

題目意思&#xff1a; 判斷字符串是否可以按照題目條件縮短。 思路&#xff1a; 用棧的思想寫&#xff0c;對每一次的大小寫都進行滾動判斷。 tips&#xff1a; 這里面要注意的東西就有一點多了&#xff0c;首先是字符串的遍歷問題auto更方便&#xff0c;其次是對小寫和大…

WebeServer實現:學到了哪些東西

前言 這里話就是總結一下之前沒講過的一些東西 系統調用 accept與accept4 ??當我們調用accept接收一個新的fd的時候&#xff0c;往往需要在調用fcntl將這個fd變成非阻塞IO,那么有沒有一個系統調用可以一次性做完這兩件事呢&#xff0c;有的有的就是accept4. // accept 函數…

React 虛擬dom

JSX創建出ReactElement對象 最終形成一個JS樹 將React.createElement對象轉為真實DOM的方法使用render函數 為什么要虛擬 dom 狀態難以跟蹤 ## 操作真實dom開銷大 &#xff0c;并且操作會引起頻繁的回流和重繪&#xff0c;并且不涉及批處理 聲明式編程 從虛擬dom向真實dom去…

Spring MVC異常處理機制

Spring MVC提供了多種異常處理機制,以下是核心處理方式及實現方法: 一、局部異常處理(Controller級別) @ExceptionHandler注解 在Controller內部定義異常處理方法,捕獲當前控制器拋出的指定異常。@Controller public class UserController {@GetMapping("/test"…

MySQL 8.x配置MGR高可用+ProxySQL讀寫分離(一):MGR構建MySQL高可用

#作者&#xff1a;stackofumbrella 文章目錄 簡介MGR優點MGR缺點MGR適用場景單主模式和多主模式組復制介紹組復制插件架構圖單主模式多主模式配置主機名解析安裝MGR插件 MGR故障轉移恢復MGR集群 簡介 MGR&#xff08;MySQL Group Replication&#xff09;是MySQL 5.7.17版本誕…

保安員證考試的理論知識部分,重點考查的法律法規具體有哪些?

保安員證考試理論知識部分&#xff0c;重點考查的法律法規主要有以下幾種&#xff1a; 《保安服務管理條例》&#xff1a;作為保安行業的專門法規&#xff0c;是考試核心。重點考查保安服務活動規范&#xff0c;如保安服務的范圍、資質要求等&#xff1b;保安員的權利與義務&am…

【好用但慎用】Windows 系統中將所有 WSL 發行版從 C 盤遷移到 非系統 盤的完整筆記(附 異常處理)

&#x1f680; 將所有 WSL 發行版從 C 盤遷移到 I 盤的完整教程&#xff08;含 Podman / NVIDIA Workbench / Ubuntu 等&#xff09; 【無標題】使用 Chocolatey 安裝 WSL 管理工具 LxRunOffline-CSDN博客 免責聲明 重要提示 在執行 WSL 遷移操作前&#xff0c;請務必仔細閱讀…

Oracle APEX 通過rtf模板下載PDF文件(BIP)

1. 上傳模板文件 共享組件 > 報表布局 2. 編寫SQL文 共享組件 > 報表查詢 報表布局中選擇1中設置完的報表布局&#xff0c;然后編寫SQL文提供數據 3. 添加下載按鈕 在頁中添加一個下載按鈕&#xff0c;添加動態操作&#xff0c;選擇打印報告 4. 下載PDF文件 點擊Pri…

Web Seach 搜索 MCP 啟動!

&#x1f680; 開啟你的 AI 助手搜索能力&#xff01;開源 Web 搜索 MCP 服務器上線&#xff01; 在 ChatGPT、Claude 等 AI 工具成為生產力新核心的今天&#xff0c;我們往往面臨一個尷尬的問題&#xff1a;模型不知道最新的網絡信息。雖然 GPT-4o 和 Claude 支持聯網功能&am…

005微信小程序npm包_全局數據共享和分包

npm包_全局數據共享和分包 1. 使用npm包1.1 Vant Weapp1.2 API Promise化 2. 全局數據共享3. 分包3.1 分包的加載規則3.2 分包的體積限制3.3 使用分包3.3 獨立分包3.4 分包預下載 1. 使用npm包 小程序對npm進行了支持與限制&#xff0c;限制如下&#xff1a; 不支持依賴于 No…

DPO直接偏好函數的學習解讀

DPO, Direct Preference Optimization&#xff0c;采用直接優化策略滿足人類偏好&#xff0c;使得LLM對于給定輸入&#xff0c;生成能用輸出的概率高于生成不能用輸出的概率。 1&#xff09;DPO優化目標 在DPO訓練過程中&#xff0c;模型通過最大化可用回答相對于不可用回答的…