当前位置: 首页 > news >正文

vue分片上传

<template><div><input type="file" id="input" /><button @click="uploadFile">上传</button></div>
</template><script lang="ts" setup>
let chunkSize=1024 * 1024,index=0;
const uploadFile=()=>{let inp=document.getElementById('input');const file=inp.files[0]const [fileName,ext] = file.name.split('.')let start=index * chunkSize // 切片起始if(start>file.size) returnconst blob= file.slice(start,start+chunkSize) // 切片const formData=new FormData()const blobName=`${fileName}${index}.${ext}` // 拼接片名const blobFile=new File([blob],blobName)console.log(blobFile)formData.append('file', blobFile)fetch('/uploadFile',{method: 'post',body: formData}).then(()=>{index++;uploadFile()})
}</script>
<template><h1>上传</h1><input type="file" @change="onChange" /><asd/>
</template><script setup lang="ts">
import  asd from './shangchuan.vue'
import SparkMD5 from "spark-md5";
const spark = new SparkMD5() //创建SparkMD5的实例const onChange=async (e:any)=>{const file=e.currentTarget.files[0] // 获取文件const chunks=createChunks(file,2 * 1024 * 1024) // 进行切片blob流const result=await hash(chunks,file) // 进行哈希加密得到16位字符
}
// 计算哈希
const hash=(chunks:any,files:any)=>{return new Promise(resolve => {const _read=(i:number)=>{if(i>=chunks.length){resolve(spark.end()) // 计算结束return // 读取完成}const blob=chunks[i] // 获取每一项const reader=new FileReader() // 解析每一块数据reader.readAsArrayBuffer(blob)const [fileName,ext] = files.name.split('.')const blobName=`${fileName}.${ext}` // 拼接片名// 转成File流const blobFile=new File([blob],blobName)const formData=new FormData() // 后端要的格式formData.append('file', blobFile)reader.onload=e=>{const bytes=e.target.result // 读取到的字节数组spark.append(bytes)fetch('/uploadFile',{method: 'post',body: formData}).then(()=>{_read(i+1)})}}_read(0)})
}// 切片
const createChunks=(file:any,chunkSize:any)=>{const resurl=[]for(let i=0;i<file.size;i+=chunkSize){resurl.push(file.slice(i,i+chunkSize))}return resurl
}
</script><style scoped></style>
http://www.lryc.cn/news/211020.html

相关文章:

  • 【大数据Hive】hive 表数据优化使用详解
  • 京东平台数据分析(京东销量):2023年9月京东吸尘器行业品牌销售排行榜
  • 基于springboot实现休闲娱乐代理售票平台系统项目【项目源码+论文说明】计算机毕业设计
  • jvm对象内存划分
  • 网络原理之TCP/IP
  • Docker:数据卷挂载
  • 你会处理 go 中的 nil 吗
  • 高级深入--day42
  • mysql 计算两个坐标距离
  • String、StringBuffer、StringBuilder和StringJoiner
  • 【数据结构】插入排序
  • Photoshop使用笔记总目录
  • 最近面试遇到的高频面试题
  • 负载均衡有哪些算法,分别在nginx中如何配置?
  • Starknet开发工具
  • Unity地面交互效果——1、局部UV采样和混合轨迹
  • 基于STM32的示波器信号发生器设计
  • 案例分析大汇总
  • MVCC(Multi-Version Concurrency Control,多版本并发控制)
  • 嵌入式面试2(c相关)
  • 基于SSM的n省出口基地公共信息服务平台设计与实现
  • opencv dnn模块 示例(20) 目标检测 object_detection 之 yolor
  • 【队列的顺序表示,链式表示】
  • Pydantic 实践
  • 获取pandas中的众数
  • SOLIDWORKS Simulation2024仿真10大新功能
  • Java程序设计2023-第二次上机练习
  • 如何在 uniapp 里面使用 pinia 数据持久化 (pinia-plugin-persistedstate)
  • 智慧矿山AI算法助力护帮板支护监测,提升安全与效率
  • shell中的运算