multipart-upload
在网络带宽允许的情况下,可针对大文件使用分片上传,以提高上传速度
实现原理
使用客户端分片方案:
- 后端封装 初始化、分片上传、合并段 三个接口供前端调用
- 前端调用初始化接口获取uploadID
- 前端对文件切片,然后并发调用切片上传接口
- 待所有切片上传成功,调用后端合并段接口获取资源url链接
交互时序图
使用方式
警告
后端需要提供支持分段上传的接口,接口开发可引用封装的分段上传公共库
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>>
参数 | 类型 | 说明 |
---|---|---|
sourceFile | File | 源文件 |
uploadParams | IUploadParams | 上传配置参数,具体字段见uploadParams字段详情 |
onProgress | (progress: number) => void | 上传总进度回调函数,非必填 |
uploadParams字段详情
参数 | 类型 | 默认值 | 说明 |
---|---|---|---|
partSize | number | 20 * 1024 * 1024 | 分片大小,单位为字节,默认10M,范围是1~100MB |
dir | string | - | 上传目录标识,非必填 |
initApi | Promise | - | 获取上传ID接口 |
uploadApi | Promise | - | 上传分片文件接口 |
mergeApi | Promise | - | 合并分片文件接口 |
返回
参数 | 说明 |
---|---|
url | 上传成功后返回的url链接 |