vue3+ts+ant upload切片上传视频

template内容:

<a-upload-dragger name="file" :multiple="false" :beforeUpload="addVideos">
  <p class="ant-upload-drag-icon">
    <inbox-outlined />
  </p>
  <p class="ant-upload-text">上传视频</p>
</a-upload-dragger>

script ts 内容

<script setup lang="ts">
   import videoApi from '/@/api/video'; *下面有说明*
   const addVideos = async (e) => {
    const file = e;
    if (file == null || file.length == 0) return;
    // 切片
    let files = createFileChunk(file, 5 * 1024 * 1024);
    const chunkCount = files.length;
    // 切片上传
    for (let index = 0; index < chunkCount; index++) {
      const videoData = new FormData();
      videoData.append('file', files[index].file);
      videoData.append('current', index.toString());
      videoData.append('filename', file.name);
      let res = await videoApi.uploadVideo(videoData);
      if (res || res.code == 200) {
        if (index == chunkCount - 1) {
          const mergeData = new FormData();
          mergeData.append('chunks', chunkCount);
          mergeData.append('filename', file.name);
          let mergeRes = await videoApi.mergeVideo(mergeData);
        }
      } else {
        break;
      }
    }
    return false;
  };
    const createFileChunk = (file, size) => {
    const fileChunkList: any = [];
    var count = 0;
    while (count < file.size) {
      fileChunkList.push({
        file: file.slice(count, count + size),
      });
      count += size;
    }
    return fileChunkList;
  };
</script>

引用的 /api/video内容是:
下载方法见下一篇(也用到这个地方)

import { ReqParams, ResResult } from './model';
import { deleted, post } from '/@/utils/http';

enum API {
  /**
   * 视频切片
   */
  uploadVideoChunk = '/common/upload/chunk',
  /**
   * 合并视频
   */
  uploadMerginVideo = '/common/upload/merge',
  /**
   * 剪辑并下载视频
   */
  videoDown = '/manage/video/download',
}
/**
 * 采用分片上传每个视频
 */
const uploadVideo = async (data) => {
  const headers = { 'Content-Type': 'application/octet-stream' };
  return post({ headers: headers, url: API.uploadVideoChunk, data });
};

const mergeVideo = async (data) => {
  return post({ url: API.uploadMerginVideo, data });
};
const videoDown = async (data) => {
  return post<ResResult>({ url: API.videoDown, data, responseType: 'blob' });
};
export default {
  uploadVideo,
  mergeVideo,
  videoDown,
};

  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
vite是一个基于浏览器原生模块系统的构建工具,它主要用于快速构建现代化的Web应用程序。它具有快速的冷启动速度、快速的热模块更新、按需编译等优点,可以大大提高开发效率。 Vue3是Vue.js的最新版本,它经过全面升级和重构,提供了更高效、更灵活的开发体验。Vue3引入了一些重要的改进,如Composition API、Teleport、Suspense等,可以帮助开发者更好地组织和管理代码。 TS是TypeScript的缩写,它是JavaScript的超集,提供了静态类型检查和强大的面向对象编程能力。使用TS可以在开发过程中更早地发现潜在的错误,帮助开发者降低Bug的发生概率,并提供了更好的代码智能提示和自动补全功能。 Ant Design是一个基于React的企业级UI组件库,提供了丰富的组件和模板,可以帮助开发者快速搭建美观、易用的用户界面。Ant Design提供了丰富的样式和主题定制能力,开发者可以根据自己的需求定制界面风格。 将vite、Vue3、TSAnt Design结合使用,可以为我们开发现代化、高效的Web应用程序提供很多便利。我们可以使用vite快速构建项目,并利用Vue3的新特性和Composition API来组织和管理代码。同时,我们可以使用TS进行静态类型检查,提高代码的可维护性和可读性。最后,借助Ant Design的组件库,我们可以轻松地构建出漂亮、易用的用户界面。这一组合使得我们能够快速构建现代化的Web应用程序,提高开发效率和用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值