美文网首页
vue中使用分片上传视频

vue中使用分片上传视频

作者: 一页莲子 | 来源:发表于2020-12-21 14:31 被阅读0次
结合背景:前段时间,由于赶项目没及时更新简书及博客园,今天更新一版。 移动端中 有一个小需求就是 上传大文件视频,正常的情况下 是一定会遇到上传超时,或者无法上传的情况,所以就搞了一个公用的文件;代码如下:
import md5 from 'js-md5' //引入MD5加密
import { fileUpload } from '@/api/common.js'  // 这里指前端调用接口的api方法
export const uploadByPieces = ({ randoms, file, pieceSize = 2, progress, success, error }) => {
  // 如果文件传入为空直接 return 返回
  if (!file || !file.length) return
  let fileMD5 = ''// 总文件列表
  const chunkSize = pieceSize * 1024 * 1024 // 5MB一片
  const chunkCount = Math.ceil(file.size / chunkSize) // 总片数
  // 获取md5
  const readFileMD5 = () => {
    // 读取视频文件的md5
    console.log("获取文件的MD5值")
    let fileRederInstance = new FileReader()
    console.log('file', file)
    fileRederInstance.readAsBinaryString(file)
    fileRederInstance.addEventListener('load', e => {
      let fileBolb = e.target.result
      fileMD5 = md5(fileBolb)
      console.log('fileMD5', fileMD5)
      console.log("文件未被上传,将分片上传")
      readChunkMD5()

    })
  }
  const getChunkInfo = (file, currentChunk, chunkSize) => {
    let start = currentChunk * chunkSize
    let end = Math.min(file.size, start + chunkSize)
    let chunk = file.slice(start, end)
    return { start, end, chunk }
  }
  // 针对每个文件进行chunk处理
  const readChunkMD5 = () => {
    // 针对单个文件进行chunk上传
    for (var i = 0; i < chunkCount; i++) {
      const { chunk } = getChunkInfo(file, i, chunkSize)
      console.log("总片数" + chunkCount)
      console.log("分片后的数据---测试:" + i)
      console.log(chunk)
      uploadChunk({ chunk, currentChunk: i, chunkCount })
    }
  }
  const uploadChunk = (chunkInfo) => {
    // progressFun()
    let config = {
      headers: {
        'Content-Type': 'multipart/form-data'
      }
    }
  // 创建formData对象,下面是结合不同项目给后端传入的对象。
    let fetchForm = new FormData()
    fetchForm.append('identifier', randoms)
    fetchForm.append('chunkNumber', chunkInfo.currentChunk + 1)
    fetchForm.append('chunkSize', chunkSize)
    fetchForm.append('currentChunkSize', chunkInfo.chunk.size)
    fetchForm.append('file', chunkInfo.chunk)
    fetchForm.append('filename', file.name)
    fetchForm.append('totalChunks', chunkInfo.chunkCount)
    fetchForm.append('totalSize', chunkSize)
    // fetchForm.append('md5', fileMD5)
    fileUpload(fetchForm, config).then(res => {
      console.log("分片上传返回信息:"+ res)
      if (res.code == 200) {
    // 结合不同项目 将成功的信息返回出去,这里可变的是指 res.data[0]
        success(res.data[0])
    // 下面如果在项目中没有用到可以不用打开注释
        // if (chunkInfo.currentChunk < chunkInfo.chunkCount - 1) {
        //   console.log("分片上传成功")

        // } else {
        //   // 当总数大于等于分片个数的时候
        //   if ((chunkInfo.currentChunk + 1) == chunkInfo.chunkCount) {
        //     console.log("文件开始------合并成功")
        //     success(res.data[0])
        //   }
        // }
      }
      else {
        console.log(res.message)
      }
    }).catch((e) => {
      error && error(e)
    })
  }
  readFileMD5() // 开始执行代码
}
组件中调用即可:
// 引入
import { uploadByPieces } from ''
// 调用
 uploadByPieces({
        randoms: '', // 随机数,这里作为给后端处理分片的标识 根据项目看情况 是否要加
        file: file.file, // 视频实体
        pieceSize: 3, // 分片大小
        success: data => {
          console.log('分片上传视频成功', data)
        },
        error: e => {
          console.log('分片上传视频失败', e)
        }
      })

相关文章

  • vue中使用分片上传视频

    结合背景:前段时间,由于赶项目没及时更新简书及博客园[https://www.cnblogs.com/huxinf...

  • vue-simple-uploader组件的一些使用心得

    前言 因为项目需要上传大文件,考虑使用分片上传、断点续传这些功能故选用vue-simple-uploader,期间...

  • 分片视频上传

    对于facebook、twitter 上传视频api中,大视频都是需要分片上传,一次上传只能几Mb内, 并且是以 ...

  • vue中使用Plupload分片上传

    说明 Plupload有以下功能和特点:1、拥有多种上传方式:HTML5、flash、silverlight以及传...

  • vue页面使用阿里云oss

    web上传文件到阿里云oss 基于vue2.0的上传页面,采用分片上传 源码 Install 1.git clon...

  • 分块上传预签名Demo

    分块上传预签名Demo 以下是分块上传的两个步骤 初始化分片上传 获取上传分片的预签名URL 使用该URL可以不带...

  • springboot + vue 分片上传,分片下载

    分片上传 前端代码 后端代码 重点:只要使用了RandomAccessFile对文件进行处理(好像还有FileCh...

  • php 上传视频(分片)

    分片上传视频,网上部分博客总结的使用方法模糊不清楚,自己总结的小demo,亲测可用!粘贴代码即可使用!不懂的可以留...

  • JS分片上传

    JS分片上传 //分片上传 function ScarecrowPatchUpload (uploadPath, ...

  • Blob类型

    Blob定义、使用场景使用场景:分片上传,File继承自Blob类型。可用Blob的slice方法对大文件进行分片...

网友评论

      本文标题:vue中使用分片上传视频

      本文链接:https://www.haomeiwen.com/subject/ryprnktx.html