浏览 SDKs · WASM
SDKsWASM

上传文件

使用 WASM SDK 独立上传文件并取得资源 URL。

复制

uploadFile() 是独立上传能力,可用于头像、群头像、资料附件或其他业务文件,不从属于消息,也不会自动创建消息。

参数说明

参数类型是否必填说明
namestring文件名。
contentTypestringMIME 类型。
uuidstring业务为本次上传生成的稳定任务 ID。
fileFile浏览器文件对象。WASM 包装层使用该对象完成上传。

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

const uploadTaskID = crypto.randomUUID();
const uploadEventID = `${uploadTaskID}/${file.name}`;

const { data } = await openimsdk.uploadFile({
  name: file.name,
  contentType: file.type || 'application/octet-stream',
  uuid: uploadTaskID,
  file,
});

await saveAvatarURL(data.url);

Promise 成功后使用 data.url 作为远端资源地址。它只表示上传请求成功,不表示头像资料已经更新,也不表示聊天消息已经创建或发送;后续业务写入必须单独完成。若资源随后用于聊天,应使用返回的 URL 创建对应消息对象,再显式发送。

监听上传进度

SdkEvent.OnProgress 提供上传进度,SdkEvent.UploadComplete 提供完成信息。处理函数必须保持稳定引用,并在账号或状态层销毁时用同一引用调用 off()

import { SdkEvent } from '@openim/wasm-client-sdk';

function handleUploadProgress({ data }) {
  if (data.clientMsgID !== uploadEventID) return;
  updateUploadProgress(data.clientMsgID, data.progress);
}

function handleUploadComplete({ data }) {
  if (data.uuid !== uploadEventID) return;
  completeUpload(
    data.uuid,
    data.fileSize,
    data.streamSize,
    data.storageSize,
  );
}

openimsdk.on(SdkEvent.OnProgress, handleUploadProgress);
openimsdk.on(SdkEvent.UploadComplete, handleUploadComplete);

function removeUploadListeners() {
  openimsdk.off(SdkEvent.OnProgress, handleUploadProgress);
  openimsdk.off(SdkEvent.UploadComplete, handleUploadComplete);
}

UploadCompletedataFileUploadProgress。WASM 包装层会把完成事件中的 uuid 组合为 ${上传参数中的 uuid}/${file.name},因此示例使用 uploadEventID 匹配事件;fileSize 是原文件大小,streamSize 是已经处理的流大小,storageSize 是远端存储对象的大小。大小字段的单位均为字节。

独立上传任务应保留业务生成的 uploadTaskID,并使用组合后的 uploadEventID 关联 SDK 事件。不要只用文件名或数组位置匹配并行上传。