Skip to content

@mbjia/upload-manager

Package

@mbjia/upload-manager

上传管理包,基于 Uppy、SharedWorker 和 Comlink。它负责跨页面上传队列、上传状态和上传事件管理。

安装

bash
npm install @mbjia/upload-manager

何时使用

场景是否需要
接入 EveryWhereUpload 或全局上传能力需要
需要监听 Uppy 上传事件需要
只做普通文件选择,不上传到业务素材库不一定需要,可先看 @mbjia/uiUpload

导出

ts
export { uppy, setToken, IndexedDBStore }
export function uppy_on(event, callback): void
export function uppy_off(event, callback): void
export function setSharedWorkerApiCookie(): void
export default uppy
导出类型说明
UploadManager模块导出上传管理主模块,入口文件通过 export * from './UploadManager' 暴露。
uppyComlink.Remote<SXUppy<SXMeta>>SharedWorker 中的 Uppy 上传实例代理。
setToken(value: string) => void设置上传请求 token。
uppy_on(event, callback) => void监听 Uppy 事件。
uppy_off(event, callback) => void取消监听 Uppy 事件。
IndexedDBStoreclassUppy 文件和缩略图的 IndexedDB 存储实现。
setSharedWorkerApiCookie() => void当前源码为空函数,保留扩展位。

事件监听

ts
import { uppy_on, uppy_off } from '@mbjia/upload-manager'

const onProgress = (file, progress) => {
  console.log(file.id, progress)
}

uppy_on('upload-progress', onProgress)
uppy_off('upload-progress', onProgress)

事件来自 @uppy/coreUppyEventMap,常见事件包括:

事件说明
file-added文件加入队列。
upload-progress上传进度变化。
upload-success单文件上传成功。
upload-error单文件上传失败。
complete批次上传完成。

IndexedDBStore

IndexedDBStore 用于跨页面/刷新恢复上传文件 Blob 和缩略图。

ts
const store = new IndexedDBStore({
  storeName: 'asset-upload',
  expires: 24 * 60 * 60 * 1000,
})

await store.put(file)
const files = await store.list()

构造参数:

字段类型默认值说明
dbNamestring'uppy-blobs'IndexedDB 数据库名。
storeNamestring'default'当前业务存储空间。
expiresnumber24 小时过期时间。
maxFileSizenumber1 GiB单文件最大存储大小。
maxTotalSizenumber5 GiB总存储大小。

方法:

方法返回值说明
readyPromise<IDBDatabase>数据库连接。
key(fileID)string生成 store 内部 key。
list()Promise<Record<string, Blob>>列出当前 store 的文件。
get(fileID)Promise<{ id; data }>获取指定文件 Blob。
getSize()Promise<number>当前 store 已占用大小。
put(file)Promise<T>保存 Uppy 文件 Blob。
delete(fileID)Promise<unknown>删除文件。
putThumbnail(fileID, preview)Promise<unknown>保存缩略图。
deleteThumbnail(fileID)Promise<unknown>删除缩略图。
listThumbnails()Promise<Record<string, string>>列出缩略图。
IndexedDBStore.cleanup()Promise<void>清理过期 Blob。
IndexedDBStore.isSupportedboolean当前浏览器是否支持 IndexedDB。

浏览器要求

必须支持 SharedWorker。如果不支持,源码会输出:

txt
当前浏览器不支持SharedWorker,上传素材会存在问题

生产混剪项目需要配置:

  • process.env.isMbjiaMixedCutProject
  • process.env.sharedWorkerPath

上传数据结构见 上传数据

MBJIA Tools 文档