浏览 SDKs · uni-app / uni-app x
SDKsuni-app

上传文件

上传本地文件、观察进度,并在商业版取消上传。

复制

uploadFile() 是独立上传能力,可用于头像、群头像、资料附件或其他业务文件,不从属于消息,也不会自动创建消息。它上传原生层可读的本地文件,并返回 URL/URI、UUID、大小和媒体信息。

参数说明

参数类型是否必填说明
filepathstring原生层可读取的本地完整路径。
namestring文件名。
contentTypestringMIME 类型。
uuidstring业务为本次上传生成的稳定任务 ID。
cancelIDstringnull用于取消本次上传的稳定 ID。
causestringnull业务侧记录的上传用途或原因。

如果界面需要显示进度,应在调用 uploadFile() 前注册进度事件,避免较小文件在监听建立前完成上传。

import {
  off,
  onUploadFileProgress,
  uploadFile,
} from '@/uni_modules/unix-openim-sdk'

const progressSubscription = onUploadFileProgress((event) => {
  if (event == null) return
  updateUploadProgress(event.progress)
})

const result = await uploadFile({
  filepath: '/data/user/0/app/cache/report.pdf',
  name: 'report.pdf',
  contentType: 'application/pdf',
  uuid: createStableUploadUUID(),
  cancelID: 'upload-report-1',
})

function removeUploadListener() {
  off(progressSubscription)
}

路径必须是原生可读的完整路径。unifile:// 先转换为平台沙盒路径;不要把网络 URL 作为 filepath。Android 和 iOS 的临时目录、文件授权与生命周期不同,上传完成前不要移动或删除原文件。

返回结果

Promise 成功后,结果是 OpenIMUploadFileResult | null

字段类型说明
urlstringnull上传后的远端资源 URL。
uristringnull服务端返回的资源 URI。
uuidstringnull本次上传的任务标识。
sizenumbernull文件大小。
typnumbernull服务端返回的资源类型。
mediaIDstringnull媒体资源 ID。

使用 result?.url 写入头像、群资料或创建对应消息对象。Promise 成功只表示上传请求成功,不表示资料已经更新,也不表示聊天消息已经创建或发送;后续业务写入必须单独完成。

监听上传进度

onUploadFileProgress 返回 OpenIMSDKEventSubscription,事件只包含 progress。当前 uni-app / uni-app x 合同不像 Wasm 完成事件那样携带任务 ID,因此不要依赖数组位置关联并行任务;需要精确展示多个并行上传时,应由业务层限制并发或按各自 Promise 状态管理。账号退出或上传状态层销毁时调用 removeUploadListener()

商业版可以通过 cancelUpload()商业版 商业版 取消同一 cancelID

import { cancelUpload } from '@/uni_modules/unix-openim-sdk'

await cancelUpload({ cancelID: 'upload-report-1' })

取消是异步请求,最终状态以原上传 Promise 和错误码为准。退出页面时不要删除仍被原生层读取的临时文件,先完成或取消上传。