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

推广网站广告软件定制开发公司

推广网站广告,软件定制开发公司,网站开发教学视频,seo短视频网页入口引流网站推荐Vue中实现大文件的切片下载 切片下载需要后端提供两个接口,第一个接口用来获取当前下载文件的总切片数,第二个接口用来获取具体某一个切片的内容。 界面展示 数据流展示 代码 接口 // 切片下载-获取文件的总切片数 export function getChunkDownload…

Vue中实现大文件的切片下载

切片下载需要后端提供两个接口,第一个接口用来获取当前下载文件的总切片数,第二个接口用来获取具体某一个切片的内容。

界面展示

在这里插入图片描述

数据流展示

在这里插入图片描述

代码

接口

// 切片下载-获取文件的总切片数
export function getChunkDownloadMetaInfo(queryParams) {return request({url: `/resource/chunkDownloadMetaInfoByUrl`,method: 'get',params: queryParams})
}// 切片下载-获取当前切片的文件内容
export function getChunkDownload(queryParams) {return request({url: `/resource/chunkDownloadByUrl`,method: 'get',headers: {'Content-Type': 'application/json; application/octet-stream'},responseType: 'blob', //响应数据格式配置params: queryParams})
}

下载

// 下载
const downloadItem = async item => {const fileName = item.fileNameconst fileUrl = item.fileUrlif (item.isDownloading) {ElMessage({type: 'error',message: `${fileName}正在下载中请稍等`})return}item.progress = 0 // 下载进度item.isDownloading = true // 是否正在下载item.isAborted = false // 是否中止下载try {// 获取文件信息const fileInfo = await getFileInfo(fileUrl)const totalChunks = fileInfo.totalChunkNum// 并发下载所有切片const downloadedChunks = await downloadWithConcurrency(fileUrl, fileName, totalChunks, item)// 合并并下载文件const mergedBlob = mergeBlobs(downloadedChunks)triggerDownload(mergedBlob, fileName)} catch (error) {console.error('下载失败:', error)ElMessage({type: 'error',message: `${fileName}文件下载失败`})} finally {item.isDownloading = false}
}
// 获取文件信息
const getFileInfo = async fileUrl => {try {const response = await getChunkDownloadMetaInfo({ url: fileUrl })return response.data} catch (error) {throw new Error(`获取文件信息失败: ${error.message}`)}
}
// 下载单个切片
const downloadChunk = async (fileUrl, fileName, chunkIndex) => {try {const response = await getChunkDownload({url: fileUrl,chunkNumber: chunkIndex})return response} catch (error) {throw new Error(`下载切片失败: ${error.message}`)}
}
// 合并 Blob
const mergeBlobs = blobs => {return new Blob(blobs)
}
// 触发文件下载
const triggerDownload = (blob, fileName) => {const url = URL.createObjectURL(blob)const a = document.createElement('a')a.href = urla.download = fileNamea.click()URL.revokeObjectURL(url)
}
// 并发下载
const downloadWithConcurrency = async (fileUrl, fileName, totalChunks, item) => {const downloadedChunks = new Array(totalChunks).fill(null)let completedChunks = 0const downloadNextChunk = async chunkIndex => {if (item.isAborted) return // 如果已中止,直接返回try {const chunk = await downloadChunk(fileUrl, fileName, chunkIndex)console.log(chunk, '123123123123123123')downloadedChunks[chunkIndex] = chunk// 更新下载进度completedChunks++item.progress = Math.round((completedChunks / totalChunks) * 100)} catch (error) {item.isAborted = true // 中止下载throw error}}// 启动并发下载const workers = []for (let i = 0; i < totalChunks; i++) {if (item.isAborted) break // 如果已中止,停止启动新任务if (workers.length >= maxConcurrency) {// 等待一个任务完成后再启动新任务await Promise.race(workers)}const worker = downloadNextChunk(i).finally(() => {workers.splice(workers.indexOf(worker), 1)})workers.push(worker)}await Promise.all(workers) // 等待所有任务完成return downloadedChunks
}
http://www.dtcms.com/wzjs/143923.html

相关文章:

  • wordpress网页如何公开本地网络seo公司
  • 做外贸上不了国外网站seo外链代发
  • 企业手机网站建设流程2022适合小学生的简短新闻
  • 岳阳做网站 公司电话日本站外推广网站
  • 纺织网站建设百度排行榜小说
  • 广州海珠区最新疫情济南seo排名优化推广
  • 如何制作个人网页文档线上seo关键词优化软件工具
  • qt做网站合肥百度推广排名优化
  • 物流网站建设重要性武汉服装seo整站优化方案
  • 长春建站推荐自己怎么做网站
  • 建设网站的准备工作分为百度指数查询官方网
  • 制作网站源码软件网络整合营销4i原则是指
  • 网站建设相关制度网络营销策划步骤
  • 龙港哪里有做阿里巴巴网站seo外链工具
  • 广东建设监理协会网站个人账号seo推广怎么入门
  • 哪个网站能看到医生做的全部手术下载手机百度最新版
  • tplink虚拟服务器做网站360竞价推广怎么做
  • 网站推广怎么样北京核心词优化市场
  • 做营销型网站 推广的好处网站关键词排名seo
  • 微信第三方做网站需要费用吗seo搜索引擎优化心得体会
  • 哪个网站有做电箱电柜的图纸十大it教育培训机构排名
  • 沈阳网站seo排名优化seo收费标准多少
  • 如何创建一个国外免费网站发布会直播平台
  • 南昌建站模板百度seo关键词排名优化软件
  • 工业设计网站哪个好用百度指数有什么作用
  • 北京市住房和城乡建设厅官方网站亚马逊排名seo
  • 肇庆网站建设优化宽带业务如何推广
  • 数据营销系统seo站长之家
  • 网站意见反馈源码怎么打广告宣传自己的产品
  • 凌源网站优化优化大师人工服务电话