文件与图片

文件与图片不是独立控制台模块:上传由客户端/应用服务器调用 POST /api/apps/{appkey}/files(Bearer 用户 JWT,≤20MB),再把返回 URL 放进 content.type=image|file|voice 的消息。控制台没有文件列表、删除或存储配额管理接口。

概念​

对象真实入口说明
上传POST /api/apps/{appkey}/filesBearer 用户 JWT;≤20MB;SDK uploadFile(data,name,mime) 封装
图片消息content:{type:"image",url,...}IMKit 渲染缩略图,失败显示占位
文件消息content:{type:"file",url,name,size,mime}IMKit 渲染文件名/大小/类型
语音消息content:{type:"voice",url,duration}IMKit 渲染 audio 播放器
管理端文件治理—未实现:没有文件清单/删除/配额接口
  • 上传返回的 URL 由服务端静态路由提供;消息只保存 URL,不内嵌二进制。
  • 文件大小上限 20MB 由上传端点约束;超限返回 1007/413 语义。
  • 控制台只能通过消息检索查看文件类消息的元数据,不能管理存储。
未实现项

控制台没有“文件/图片”tab,也没有文件删除与容量配额 API;本页不虚构管理端点。需要治理请在对象存储/网关层做。

前置条件​

  • 服务端已启动(默认 http://127.0.0.1:8080),控制台入口 http://127.0.0.1:8080/console/。
  • 请求头 X-Admin-Secret 与服务端 IM_ADMIN_SECRET 一致(本地默认 dev-admin)。
  • 已在控制台选中应用;带 {appkey} 的接口都按应用隔离。
  • 自托管版无购买、计费、套餐、续费与发票流程(不适用项);本页只覆盖配置、查询与治理接口。

步骤​

  1. 上传前确认身份

    上传使用用户 JWT(Bearer),不是 AppSecret;确保用户已连接或持有有效 Token。

  2. 调用上传

    SDK:const r = await client.uploadFile(file, file.name, file.type);返回 data.url。

  3. 发送消息

    把 URL 放进对应 content 类型;文本/图片/文件可复用同一会话。

  4. 验证渲染

    接收端 IMKit 按类型渲染;加载失败时有占位提示。

参数表​

操作方法与路径参数
上传文件POST /api/apps/{appkey}/filesBearer JWT;multipart 文件;≤20MB
发送图片消息RIM.sendImageMessage(...){conversationType,targetId,url,...}
发送文件消息RIM.sendFileMessage(...){url,name,size,mime}
发送语音消息RIM.sendVoiceMessage(...){url,duration}

示例​

SDK 上传并发送图片​

Shell
import { createClient } from '@ni-paas/im-web';

const client = createClient({ appkey: 'demo' });
await client.connect(token);

const file = document.querySelector('#picker').files[0];
const uploaded = await client.uploadFile(file, file.name, file.type);
if (uploaded.code !== 0) throw new Error(uploaded.msg);

await client.sendImageMessage({
  conversationType: 1,
  targetId: 'bob',
  url: uploaded.data.url,
  width: 1280,
  height: 720,
});

直接调用上传端点​

Shell
curl -sS -X POST "http://127.0.0.1:8080/api/apps/demo/files" \
  -H 'Authorization: Bearer <user-jwt>' \
  -F 'file=@./photo.png'

常见问题​

上传用 AppSecret 还是用户 Token?​

用用户 JWT(Bearer);AppSecret 只用于服务端 Open API 签名。

文件存哪里、能删吗?​

由服务端本地存储提供;没有删除/清单接口,控制台也不能管理。

超过 20MB 怎么办?​

先压缩或分片到对象存储,再把外部 URL 放进消息;上传端点不接受超限文件。

图片加载失败显示什么?​

IMKit 显示“[图片加载失败]”占位,不会破坏消息列表。

相关链接​