Skip to content

multipart-upload

在网络带宽允许的情况下,可针对大文件使用分片上传,以提高上传速度

实现原理

使用客户端分片方案:

  1. 后端封装 初始化、分片上传、合并段 三个接口供前端调用
  2. 前端调用初始化接口获取uploadID
  3. 前端对文件切片,然后并发调用切片上传接口
  4. 待所有切片上传成功,调用后端合并段接口获取资源url链接

交互时序图

img

使用方式

警告

后端需要提供支持分段上传的接口,接口开发可引用封装的分段上传公共库

vue
<script lang="ts">
import { useMultipartUpload } from '@/hooks/specific/use-multipart-upload';
/**
 * 分片上传
 * @param sourceFile 源文件
 * @param uploadParams 上传配置参数
 * @param onProgress 进度回调函数,回调参数为进度值,类型为number
 * @returns 返回一个Promise函数,成功返回对象包含url字段,失败返回接口响应数据
 */
useMultipartUpload(
    file,
    {
        partSize: 20 * 1024 * 1024,
        dir: 'custom-dir',
        initApi: api_multipart_init,
        uploadApi: api_multipart_upload,
        mergeApi: api_multipart_merge
    },
    (progress: number) => {
        console.log(progress);
    }
).then(_res => {
    console.log('上传成功', _res.url);
}).catch(_err => {
    console.log('上传失败', _err);
});
</script>

API

useMultipartUpload(sourceFile, uploadParams, onProgress) => Promise<Record<'url', string>>

参数类型说明
sourceFileFile源文件
uploadParamsIUploadParams上传配置参数,具体字段见uploadParams字段详情
onProgress(progress: number) => void上传总进度回调函数,非必填

uploadParams字段详情

参数类型默认值说明
partSizenumber20 * 1024 * 1024分片大小,单位为字节,默认10M,范围是1~100MB
dirstring-上传目录标识,非必填
initApiPromise-获取上传ID接口
uploadApiPromise-上传分片文件接口
mergeApiPromise-合并分片文件接口

返回

参数说明
url上传成功后返回的url链接

MIT Licensed