帮你快速理解、总结文档立即下载

文件管理

最近更新时间:2026-09-30 16:51:32
本文档已由 AI 辅助审校
我的收藏

前期准备

开始操作前,确保您已经完成了 SDK 初始化。如果您还没有初始化 SDK,请先参考快速入门文档完成。
注意:
如果媒体库启用回收站功能,删除文件时会移入回收站而非永久删除。
符号链接所指向的文件不会因为重命名或移动而丢失指向。

文件信息

获取文件信息

infoFile 用于获取文件的详细信息和下载链接,支持获取历史版本文件信息。
// 获取文件详细信息
const res = await smh.file.infoFile({
spaceId: 'your-space-id',
filePath: '/test.xlsx',
info: 1,
historyId: '123',
purpose: 'preview',
});

if (res.status === 200) {
console.log('文件信息获取成功', res.data);
}
参数说明
参数名
参数描述
类型
是否必填
spaceId
空间 ID
String
是
filePath
文件路径
String
是
info
获取文件信息标识,固定为 1
Number
是
historyId
历史版本 ID,用于获取不同版本的文件内容,不传默认为最新版
String
否
contentDisposition
响应头 Content-Disposition,支持 inline 或 attachment,默认为 inline
String
否
purpose
用途,可设置为 download 或 preview
String
否
userId
用户身份识别
String
否
trafficLimit
单链接下载限速,范围 100KB/s-100MB/s,单位 B
Number
否
preCheck
是否只用于校验文件是否可预览和下载,设置后返回结果中不包含 cosUrl
Number
否
withShortLink
0 或 1,设置为 1 时返回的 cosUrl 将被替换为短链形式
Number
否
period
下载/预览链接有效期(秒),范围 [60, 7200],默认 7200
Number
否
withFavoriteStatus
0 或 1,设置为 1 时返回结果中包含收藏状态
Number
否
preview
0 或 1,设置为 1 时返回结果中包含在线预览链接
Number
否
返回值说明
字段
说明
类型
cosUrl
带签名的下载链接
String
type
文件类型
String
creationTime
文件首次完成上传的时间
String
modificationTime
文件最近一次被覆盖的时间
String
contentType
媒体类型
String
size
文件大小(字符串格式)
String
eTag
文件 ETag
String
crc64
文件的 CRC64-ECMA182 校验值
String
fileType
文件类型:excel、powerpoint 等
String
previewByDoc
是否可通过 wps 预览
Boolean
previewByCI
是否可通过万象预览
Boolean
previewAsIcon
是否可用预览图当做 icon
Boolean
metaData
元数据
Object
labels
简易文件标签列表
Array
category
文件自定义的分类
String
localCreationTime
文件对应的本地创建时间
String
localModificationTime
文件对应的本地修改时间
String
versionId
文件版本号
Number

获取照片/视频封面缩略图

getCover 用于获取文件的封面图片或视频帧,支持指定尺寸和缩放比例。
const res = await smh.file.getCover({
spaceId: 'your-space-id',
filePath: '/video.mp4',
preview: 1,
size: 256,
scale: 12,
widthSize: 256,
heightSize: 256,
frameNumber: 1
});

// 服务端返回 302,axios 会自动跟随跳转,res.status 为最终响应的 200,响应体即封面图片内容
// 如需封面 URL 本身,请改用 infoFile 获取 cosUrl
console.log('封面获取成功,状态码:', res.status);
参数说
参数名
参数描述
类型
是否必填
spaceId
空间 ID
String
是
filePath
文件路径
String
是
preview
预览标识,固定为 1
Number
是
userId
用户身份识别
String
否
size
缩略图尺寸(像素)
Number
否
scale
缩放比例
Number
否
widthSize
宽度尺寸(像素)
Number
否
heightSize
高度尺寸(像素)
Number
否
frameNumber
视频帧号
Number
否
返回值:服务端返回 HTTP 302 并通过 Location 重定向到封面图片 URL;axios 会自动跟随跳转,客户端实际观察到的 res.status 为 200,响应体为图片内容。

获取文档预览

previewFile 用于获取 HTML 格式或图片格式的文档预览,支持 PPT、Word、Excel 等文档类型。
// 获取 HTML 格式预览
const res = await smh.file.previewFile({
spaceId: 'your-space-id',
filePath: '/foo/bar.pptx',
preview: 1,
type: 'html',
});

// 服务端返回 302,axios 会自动跟随跳转,res.status 为最终响应的 200
// 响应体即预览内容(HTML 或 type 为 pic 时的 JPG),可直接写入文件或返回给前端
console.log('预览获取成功,状态码:', res.status);
参数说明
参数名
参数描述
类型
是否必填
spaceId
空间 ID
String
是
filePath
文件路径
String
是
preview
预览标识,固定为 1
Number
是
historyId
历史版本 ID
String
否
type
预览类型,html 或 pic
String
否
userId
用户身份识别
String
否
返回值:服务端返回 HTTP 302 并通过 Location 重定向到预览内容(HTML 或 JPG);axios 会自动跟随跳转,客户端实际观察到的 res.status 为 200。

检查文件状态

checkFileStatus 用于检查文件是否存在。
const res = await smh.file.checkFileStatus({
spaceId: 'your-space-id',
filePath: '/test.xlsx',
});

if (res.status === 200) {
console.log('文件存在');
}
参数说明
参数名
参数描述
类型
是否必填
spaceId
空间 ID
String
是
filePath
文件路径
String
是
historyId
历史版本 ID
String
否
userId
用户身份识别
String
否
返回值:HTTP 200,文件存在。

根据 inode 获取文件信息

getFileInfoByInode 通过文件的 inode 查询文件详细信息。
const res = await smh.file.getFileInfoByInode({
spaceId: 'your-space-id',
inode: '46bb40dd044f66340006425bd913af6f'
});

if (res.status === 200) {
console.log('文件信息获取成功', res.data);
}
参数说
参数名
参数描述
类型
是否必填
spaceId
空间 ID
String
是
inode
文件 inode
String
是
返回值:HTTP 200,返回文件详细信息。

文件管理

复制文件

copyFile 将文件复制到目标路径。
const res = await smh.file.copyFile({
spaceId: 'your-space-id',
filePath: '/dest/test.xlsx',
conflictResolutionStrategy: 'rename',
copyFileRequest: {
copyFrom: '/test.xlsx'
}
});

if (res.status === 200) {
console.log('文件复制成功', res.data);
}
参数说明
参数名
参数描述
类型
是否必填
spaceId
空间 ID
String
是
filePath
目标文件路径
String
是
conflictResolutionStrategy
冲突处理方式
String
否
userId
用户身份识别
String
否
copyFileRequest.copyFrom
源文件路径
String
是

重命名或移动文件

moveFile 将文件移动到目标路径或重命名文件。
const res = await smh.file.moveFile({
spaceId: 'your-space-id',
filePath: '/dest/test.xlsx',
conflictResolutionStrategy: 'rename',
moveFileRequest: {
from: '/test.xlsx'
}
});

if (res.status === 200) {
console.log('文件移动成功', res.data);
}
参数说明
参数名
参数描述
类型
是否必填
spaceId
空间 ID
String
是
filePath
目标文件路径
String
是
conflictResolutionStrategy
冲突处理方式
String
否
userId
用户身份识别
String
否
moveFileRequest.from
源文件路径
String
是

删除文件

deleteFile 删除指定文件。如果媒体库启用了回收站功能,则文件会被移入回收站而非永久删除。
// 移入回收站
const res = await smh.file.deleteFile({
spaceId: 'your-space-id',
filePath: '/test.xlsx',
permanent: 0,
});

if (res.status === 200) {
console.log('文件已移入回收站', res.data);
}
参数说
参数名
参数描述
类型
是否必填
spaceId
空间 ID
String
是
filePath
文件路径
String
是
permanent
1: 永久删除,0: 移入回收站(默认)
Number
否
userId
用户身份识别
String
否

创建符号链接

createSymlink 创建指向其他文件的符号链接,所指向的文件不会因重命名或移动而丢失指向。
const res = await smh.file.createSymlink({
spaceId: 'your-space-id',
filePath: '/test.xlsx',
conflictResolutionStrategy: 'rename',
createSymlinkRequest: {
linkTo: '/dest/test.xlsx'
}
});

if (res.status === 200) {
console.log('符号链接创建成功', res.data);
}
参数说明
参数名
参数描述
类型
是否必填
spaceId
空间 ID
String
是
filePath
符号链接路径
String
是
conflictResolutionStrategy
冲突处理方式
String
否
userId
用户身份识别
String
否
createSymlinkRequest.linkTo
指向的源文件绝对路径
String
是

文档转码

convertFile 将文档转换为其他格式(当前仅支持 Word 文档 doc/docx 转 PDF),转码为异步任务,返回 202 与 taskId,需通过任务管理接口轮询转码结果。
const res = await smh.file.convertFile({
spaceId: 'your-space-id',
filePath: '/dest/test.pdf', // 目标文件路径
convert: 1,
conflictResolutionStrategy: 'rename',
convertFileRequest: {
convertFrom: '/documents/test.docx' // 源文件路径
}
});

if (res.status === 202) {
console.log('转码任务已提交,任务ID:', res.data.taskId);
// 通过任务管理接口轮询转码结果
}
便捷方法 convertFileWithAsync
convertFileWithAsync 是对 convertFile 的封装:提交转码任务后自动轮询任务状态(间隔 1 秒),直到任务结束,直接返回最终结果,无需手动轮询:
const result = await smh.convertFileWithAsync({
spaceId: 'your-space-id',
filePath: '/dest/test.pdf',
convertFileRequest: {
convertFrom: '/documents/test.docx'
},
});

// result 为任务结果(QueryTask200ResponseInner),含 status 与 result 字段
console.log('转码完成,状态码:', result.status);
说明:
WithAsync 系列便捷方法均挂载在客户端根级别(如 smh.convertFileWithAsync、smh.batchCopyWithAsync),与 smh.file.convertFile 等原始接口的命名空间不同。
convertFileWithAsync 默认使用 convert=1 与 conflictResolutionStrategy=rename。
轮询间隔固定为 1 秒;任务达到终态(200/204/207/400/403/404/500)即返回,任务失败(500)也会正常返回结果而不会抛错,请检查返回的 status。
如需中途停止轮询,可通过参数的 onCleanup 回调获取停止函数。
convertFile 参数说明
参数名
参数描述
类型
是否必填
spaceId
空间 ID
String
是
filePath
目标文件路径
String
是
convert
转码标识,固定为 1
Number
是
conflictResolutionStrategy
冲突处理方式
String
否
userId
用户身份识别
String
否
convertFileRequest.convertFrom
源文件路径
String
是
convertFileWithAsync 参数说明
参数与 convertFile 相同,其中 convert 与 conflictResolutionStrategy 由封装默认填充(convert=1、rename),无需传入;另支持 onCleanup 回调(类型 (cleanup: () => void) => void),用于获取中途停止轮询的函数。

查询文件删除原因

checkFileDeletion 查询文件被删除的原因(用户主动删除或 quota 超限删除)。要求权限:admin 或 space_admin。
const res = await smh.file.checkFileDeletion({
spaceId: 'your-space-id',
inode: '46bb40dd044f66340006425bd913af6f'
});

if (res.status === 200) {
console.log('删除信息:', res.data);
}
参数说明
参数名
参数描述
类型
是否必填
spaceId
空间 ID
String
是
inode
文件的 Inode
String
是
返回值:HTTP 200,返回 reason(RemovedByQuota/Unknown)、deletedAt、quotaCleanupRecordRetentionDays。

获取最近使用文件

注意:
若您使用获取最近使用文件功能,需要具有空间的读权限。
功能说明
listRecentlyUsedFile 实现获取用户最近使用的文件列表,支持按操作类型、文件类型等条件进行过滤,并可选择是否返回文件完整路径。
使用示例
const res = await smh.recent.listRecentlyUsedFile({
spaceId: 'your-space-id',
listRecentlyUsedFileRequest: {
marker: 'xxx',
limit: 20,
filterActionBy: 'preview',
type: ['pdf', 'word'],
withPath: true
}
});

if (res.status === 200) {
console.log('获取最近使用文件成功', res.data);
}
参数说明
参数名
参数描述
类型
是否必填
spaceId
空间 ID
String
是
listRecentlyUsedFileRequest
获取最近使用文件请求对象
Object
是
listRecentlyUsedFileRequest 对象说明
字段
参数描述
类型
是否必填
marker
用于顺序列出分页的标识,不传默认第一页
String
否
limit
用于顺序列出分页时本地列出的项目数限制,不传则默认 20
Number
否
filterActionBy
筛选操作方式,不传返回全部。可选值:preview(只返回预览操作)、modify(返回编辑操作)
String
否
type
筛选文件类型,字符串或字符串数组
String / Array
否
withPath
是否返回文件的完整路径信息,默认为 false
Boolean
否
文件类型说明(type 参数)
预定义类型
类型值
描述
包含的文件扩展名
all
搜索所有文件(默认值)
所有文件类型
document
搜索所有文档
pdf、powerpoint、excel、word、text 类型
pdf
仅搜索 PDF 文档
.pdf
powerpoint
仅搜索演示文稿
.ppt、.pptx、.pot、.potx 等
excel
仅搜索表格文件
.xls、.xlsx、.ett、.xltx、.csv 等
word
仅搜索文档
.doc、.docx、.dot、.wps、.wpt 等
text
仅搜索纯文本
.txt、.asp、.htm 等
使用示例
// 使用预定义类型
type: 'document'

// 使用预定义类型数组
type: ['pdf', 'word', 'excel']

// 使用文件扩展名数组
type: ['.pdf', '.doc', '.xlsx']
返回值说明
HTTP 状态码:200
请求成功,返回最近使用文件列表。
响应示例
{
"nextMarker": "xxx",
"contents": [
{
"name": "文档.docx",
"spaceId": "space-id-1",
"inode": "xxxxx",
"size": "2048576",
"actionType": "preview",
"operationTime": "2025-12-03T10:30:00Z",
"creationTime": "2025-12-01T08:00:00Z",
"crc64": "xxxxxx",
"path": ["folder1", "文档.docx"]
}
]
}
响应字段说明
字段
说明
类型
nextMarker
用于顺序列出分页的标识
String
contents
最近使用文件列表
Array
contents 数组元素说明
字段
说明
类型
name
文件名
String
spaceId
空间 ID
String
inode
文件 ID
String
size
文件大小(字节),字符串格式
String
actionType
操作类型:preview、modify
String
operationTime
加入最近使用文件列表的时间
String
creationTime
文件的上传时间
String
crc64
文件的 CRC64-ECMA182 校验值
String
path
文件路径,仅当 withPath 为 true 时返回
Array

创建虚拟文件

createVirtualFile 在指定路径创建一个不包含实际内容的虚拟文件记录,可设置媒体类型、元数据、标签、分类和大小。虚拟文件不对应实际的 COS 对象存储,仅保存元数据信息,可用于占位或记录外部资源引用;不支持上传、下载、预览和转码。
// 创建最简单的虚拟文件
const res = await smh.file.createVirtualFile({
spaceId: 'your-space-id',
filePath: '/documents/reference.vfile',
virtualFile: 1,
});
参数说明
参数名
参数描述
类型
是否必填
spaceId
空间 ID
String
是
filePath
文件路径
String
是
virtualFile
固定标识,固定值为 1
Number
是
conflictResolutionStrategy
冲突处理方式
String
否
userId
用户身份识别
String
否
createVirtualFileRequest.contentType
虚拟文件的媒体类型
String
否
createVirtualFileRequest.metaData
自定义元数据键值对
Object
否
createVirtualFileRequest.labels
文件标签列表
Array
否
createVirtualFileRequest.category
文件自定义分类
String
否
createVirtualFileRequest.size
虚拟文件大小(字节),默认 "0",非零值会占用空间配额
String
否

文件收藏

文件收藏

注意:
若您使用收藏管理功能,需要具有相应空间的读写权限,且初始化创建 access_token 时必须要传 userId,否则会没有权限。
功能说明
createFavorite 实现收藏指定空间的文件或目录。支持通过文件路径或文件 ID(inode)进行收藏操作。
使用示例
// 通过路径收藏
const res = await smh.favorite.createFavorite({
spaceId: 'your-space-id',
createFavoriteRequest: {
path: '/documents/report.docx'
}
});

// 通过 inode 收藏
const res2 = await smh.favorite.createFavorite({
spaceId: 'your-space-id',
createFavoriteRequest: {
inode: '46bb40dd044f66340006425bd913af6f'
}
});
参数说明
参数名
参数描述
类型
是否必填
spaceId
空间 ID,如果媒体库为单租户模式,则该参数固定为连字符(-);如果媒体库为多租户模式,则必须指定该参数
String
是
createFavoriteRequest
收藏请求对象
Object
是
createFavoriteRequest 对象说明
字段
参数描述
类型
是否必填
path
文件或目录的路径
String
否
inode
文件或目录的 ID
String
否
注意:
path 和 inode 二选一,至少提供一个;如果同时提供,以 inode 为准。
返回值说明
HTTP 状态码:200
收藏成功,返回文件或目录的 ID。
响应示例
{
"inode": "46bb40dd044f66340006425bd913af6f"
}
响应字段说明
字段
说明
类型
inode
文件或目录的 ID
String

查看收藏列表

注意:
若您使用收藏管理功能,需要具有相应空间的读写权限,且初始化创建 access_token 时必须要传 userId,否则会没有权限。
查看收藏列表支持两种分页方式:marker/limit 方式和 page/pageSize 方式,两种方式不能同时使用。
功能说明
listFavorite 实现查看指定空间的收藏列表,支持分页、排序和路径返回等功能。
使用示例
// 使用 marker/limit 分页方式
const res = await smh.favorite.listFavorite({
spaceId: 'your-space-id',
marker: 'xxx',
limit: 20,
orderBy: 'favoriteTime',
orderByType: 'desc',
withPath: true
});

if (res.status === 200) {
console.log('获取收藏列表成功', res.data);
console.log('下一页标识:', res.data.nextMarker);
res.data.contents.forEach(item => {
console.log(`文件名: ${item.name}, 收藏时间: ${item.favoriteTime}`);
});
}

// 使用 page/pageSize 分页方式
const res2 = await smh.favorite.listFavorite({
spaceId: 'your-space-id',
page: 1,
pageSize: 20,
orderBy: 'favoriteTime',
orderByType: 'desc'
});

if (res2.status === 200) {
console.log('总数:', res2.data.totalNum);
}
参数说明
参数名
参数描述
类型
是否必填
spaceId
空间 ID,如果媒体库为单租户模式,则该参数固定为连字符(-);如果媒体库为多租户模式,则必须指定该参数
String
是
marker
用于顺序列出分页的标识,不传默认第一页。不能与 page、pageSize 参数同时使用
String
否
limit
用于顺序列出分页时本地列出的项目数限制,默认为 20。不能与 page、pageSize 参数同时使用
Number
否
page
分页码,默认第一页。不能与 marker、limit 参数同时使用
Number
否
pageSize
分页大小,默认 20。不能与 marker、limit 参数同时使用
Number
否
orderBy
排序字段,按收藏时间排序为 favoriteTime(默认),目前仅支持按收藏时间排序
String
否
orderByType
排序方式,升序为 asc,降序为 desc(默认)
String
否
withPath
是否返回文件路径,true 表示返回,false 表示不返回(默认)
Boolean
否
返回值说明
HTTP 状态码:200
获取成功,返回收藏列表。
响应示例
{
"nextMarker": "xxx",
"totalNum": 50,
"contents": [
{
"spaceId": "space-id-1",
"type": "file",
"inode": "46bb40dd044f66340006425bd913af6f",
"name": "文档.docx",
"size": "2048576",
"creationTime": "2025-12-01T08:00:00Z",
"modificationTime": "2025-12-02T10:30:00Z",
"favoriteTime": "2025-12-03T14:20:00Z",
"fileType": "document",
"path": ["文档", "文档.docx"],
"userId": "test-user-id",
"eTag": "abc123def456",
"contentType": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
"crc64": "1234567890123456789",
"previewByDoc": true,
"previewByCI": false,
"previewAsIcon": true
}
]
}
响应字段说明
字段
说明
类型
nextMarker
用于顺序列出分页的标识,仅当使用 marker/limit 方式分页且当前不为最后一页时会返回
String
totalNum
收藏文件目录的总数,仅当使用 page/pageSize 方式分页时会返回
Number
contents
收藏的文件目录集合,数组格式
Array
contents 数组元素说明
字段
说明
类型
spaceId
空间 ID
String
type
文件目录类型,可选值:dir(目录)、file(文件)。如果文件已被删除,则不返回该字段
String
inode
文件或目录 ID
String
name
文件或目录名称。如果文件已被删除,则返回空字符串
String
size
文件的大小(单位:字节)。如果为目录或文件已被删除,则不返回该字段
String
creationTime
文件或目录的创建时间,ISO 8601 格式。如果文件已被删除,则不返回该字段
String
modificationTime
文件最近一次被覆盖的时间,ISO 8601 格式。如果文件已被删除,则不返回该字段
String
favoriteTime
文件或目录的收藏时间,ISO 8601 格式
String
fileType
文件类型。如果为目录或文件已被删除,则不返回该字段
String
path
文件目录路径,字符串数组格式。仅当请求参数 withPath 为 true 时返回该字段
Array
userId
收藏人 ID
String
eTag
目录或文件的 ETag
String
virusAuditStatus
查毒状态,可选值:0-6
Number
labels
文件标签数组
Array
category
自定义文件分类,如 image、video、doc 等
String
contentType
媒体类型(仅非目录或相簿返回)
String
crc64
文件的 CRC64-ECMA182 校验值
String
previewByDoc
是否可通过 WPS 预览(仅非目录或相簿返回)
Boolean
previewByCI
是否可通过万象预览(仅非目录或相簿返回)
Boolean
previewAsIcon
是否可用预览图作为 icon(仅非目录或相簿返回)
Boolean
removedByQuota
是否因为配额超限而被删除文件(仅非目录或相簿返回)
Boolean
metaData
元数据(仅非目录或相簿返回)
Object

取消收藏

注意:
若您使用收藏管理功能,需要具有相应空间的读写权限,且初始化创建 access_token 时必须要传 userId,否则会没有权限。
功能说明
deleteFavorite 实现取消收藏指定空间的文件或目录。支持通过文件路径或文件 ID(inode)进行取消收藏操作。
使用示例
// 通过路径取消收藏
const res = await smh.favorite.deleteFavorite({
spaceId: 'your-space-id',
cancel: 1,
deleteFavoriteRequest: {
path: '/documents/report.docx'
}
});

// 通过 inode 取消收藏
const res2 = await smh.favorite.deleteFavorite({
spaceId: 'your-space-id',
cancel: 1,
deleteFavoriteRequest: {
inode: '46bb40dd044f66340006425bd913af6f'
}
});
参数说明
参数名
参数描述
类型
是否必填
spaceId
空间 ID,如果媒体库为单租户模式,则该参数固定为连字符(-);如果媒体库为多租户模式,则必须指定该参数
String
是
cancel
取消收藏标志,固定传递 1 表示执行取消收藏操作
Number
是
deleteFavoriteRequest
取消收藏请求对象
Object
是
deleteFavoriteRequest 对象说明
字段
参数描述
类型
是否必填
path
文件或目录的路径
String
否
inode
文件或目录的 ID
String
否
注意:
path 和 inode 二选一,至少提供一个;如果同时提供,以 inode 为准。
返回值说明
HTTP 状态码:204
取消收藏成功,无响应体。

增量同步

获取增量游标

getDeltaCursor 获取当前最新的增量游标(cursor),标记变更日志的最新位置。
典型使用流程:
1. 先调用本接口获取当前最新的 cursor
2. 调用列出目录或文件接口全量拉取空间文件列表
3. 使用步骤 1 的 cursor 调用 queryDeltaLog 补齐全量拉取期间的变更
4. 后续定期使用保存的 cursor 调用 queryDeltaLog 进行增量同步
说明:
cursor 是一个不透明的字符串标记,调用方应将其作为黑盒保存和传递,无需解析其内容。
const res = await smh.file.getDeltaCursor({
spaceId: 'your-space-id',
});

if (res.status === 200) {
console.log('当前最新增量游标:', res.data.cursor);
}
参数说明:
参数名
参数描述
类型
是否必填
spaceId
空间 ID
String
是
userId
用户身份识别
String
否
返回值:HTTP 200,返回 cursor。

查询增量变动日志

queryDeltaLog 根据 cursor 拉取文件系统的增量变更日志列表,返回 cursor 之后发生的所有文件/目录变动事件。
let cursor = savedCursor;

do {
const res = await smh.file.queryDeltaLog({
spaceId: 'your-space-id',
cursor,
limit: 100,
});

if (res.status === 200) {
const { contents, cursor: nextCursor, hasMore } = res.data;
contents.forEach(item => {
console.log(item.eventType, item.name, item.inode);
});
cursor = nextCursor;
if (!hasMore) break;
} else {
break;
}
} while (true);
参数说明
参数名
参数描述
类型
是否必填
spaceId
空间 ID
String
是
cursor
增量游标
String
是
limit
分页项目数,默认 100,最大 1000
Number
否
userId
用户身份识别
String
否
常用事件类型
事件类型
说明
FILE.CREATE
文件/目录/软链接创建
FILE.MODIFY
文件内容修改
FILE.DELETE
文件彻底删除
FILE.COPY
文件/目录复制
FILE.MOVE
文件/目录移动(含重命名)
FILE.TRASH
文件/目录放入回收站
FILE.RESTORE
文件/目录从回收站恢复
FILE.CREATE_OVERWRITE
创建文件时覆盖已有文件
FILE.MOVE_OVERWRITE
移动文件时覆盖已有文件
HISTORY.CREATE
历史版本创建
HISTORY.DELETE
历史版本删除
HISTORY.LATEST
设为最新版本(回滚)
注意:
cursor 的最大有效期为 180 天,使用过期 cursor 时服务端返回 CursorExpired 错误,此时应重新获取 cursor 并进行全量同步。

高级功能

下载文件(底层接口)

downloadFile 用于下载文件。服务端通过 HTTP 302 重定向到真实下载地址,无 JSON 响应体。日常下载建议使用 上传与下载 文档中的高层封装 createDownloadTask(下载到本地路径,支持分片并发、进度回调和完整性校验),或先通过 infoFile 获取带签名的下载链接(cosUrl)后自行处理。
使用示例
const res = await smh.file.downloadFile({
spaceId: 'your-space-id',
filePath: '/documents/report.pdf',
purpose: 'download',
});

// 302 跳转由 HTTP 层处理,无 JSON 响应体
console.log('Status:', res.status);
参数说明
参数名
参数描述
类型
是否必填
spaceId
空间 ID
String
是
filePath
文件路径
String
是
historyId
历史版本 ID,不传默认为最新版
String
否
contentDisposition
响应头 Content-Disposition,支持 inline(默认)或 attachment
String
否
purpose
用途,download 或 preview;preview 会将文件加入最近使用列表
String
否
trafficLimit
单链接下载限速,范围 100KB/s-100MB/s,单位 B
Number
否
internalDomain
是否使用内网域名,0 或 1,默认 0
Number
否
userId
用户身份识别
String
否

底层上传接口编排说明

上传与下载 文档中的高层封装 createUploadTask 已自动完成上传全流程编排(含秒传、分片、续期、确认),业务应优先使用。如需自行控制上传过程(如对接自有上传通道),可按以下顺序编排底层上传接口:
1. 开始上传(三选一):simpleUploadFile(简单上传,PUT + 文件内容一次上传)、formUploadFile(表单上传,POST 返回表单字段后向 COS 发起 multipart/form-data 上传,文件字段名固定 file 且须为最后一项)、multipartUploadFile(分块上传,POST + multipart=1,返回 uploadId 后按 https://{Domain}{Path}?uploadId={UploadId}&partNumber={N} 逐块上传,无需回传 ETag)。三个接口仅向 SMH 申请上传参数,文件字节流由客户端直传 COS;请求体携带 beginningHash/fullHash/size 可触发秒传(200 即完成,201 需继续上传)。
2. 查询上传任务状态:getFileUpload(GET + upload=1 + confirmKey),可查询已上传分块信息,用于断点续传。
3. 分块任务续期:renewMultipartUpload(POST + renew=1 + confirmKey),上传参数过期(expiration)前续期,仅支持分块任务。
4. 完成上传:completeFileUpload(POST + confirm=1 + confirmKey),建议携带 crc64 校验值。上传完成后必须调用本接口,否则文件无法正确存储。
5. 取消上传:abortFileUpload(DELETE + upload=1 + confirmKey),分块任务会同时放弃 COS 分块上传任务。