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

文件管理

最近更新时间:2026-09-30 16:51:33
我的收藏

前期准备

开始操作前,确保您已经完成了 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,
// 或直接把本接口的请求地址交给 <img src> 使用(浏览器会自动跳转)
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
// 如需在页面中展示预览,可直接把本接口的请求地址用于 <iframe src>(HTML 预览)
// 或 <img src>(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 将文档转换为其他格式,支持异步转码任务。
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);
// 通过任务管理接口轮询转码结果
}
参数说明
参数名
参数描述
类型
是否必填
spaceId
空间 ID
String
是
filePath
目标文件路径
String
是
convert
转码标识,固定为 1
Number
是
conflictResolutionStrategy
冲突处理方式
String
否
userId
用户身份识别
String
否
convertFileRequest.convertFrom
源文件路径
String
是

查询文件删除原因

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", "文档.doc"]
}
]
}
响应字段说明
字段
说明
类型
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 并进行全量同步。

高级功能

解压预览

previewZipFile 在不解压文件的情况下预览压缩包内容,支持 zip、tar、gz、7zip、rar 格式。
注意:
此功能需在媒体库(library)级别开启 enableFileUncompress 功能后方可使用,未开启时返回 403(FileUncompressNotEnabled)。
// 扁平列表格式预览
const res = await smh.file.previewZipFile({
spaceId: 'your-space-id',
filePath: '/archive.zip',
zipPreview: 1,
format: 'flat',
});

if (res.status === 200) {
console.log('文件数量:', res.data.fileNumber);
console.log('是否被截断:', res.data.isTruncated);
console.log('文件列表:', res.data.contents);
}

// 树形结构格式预览
const res2 = await smh.file.previewZipFile({
spaceId: 'your-space-id',
filePath: '/archive.zip',
zipPreview: 1,
format: 'tree',
});
参数说明
参数名
参数描述
类型
是否必填
spaceId
空间 ID
String
是
filePath
文件路径
String
是
zipPreview
解压预览标识,固定值为 1
Number
是
format
返回格式:flat(扁平列表,默认)、tree(树形结构)
String
否
password
加密压缩包密码
String
否
使用限制:
大小限制:tar/gz/rar 需小于 128MB,zip/7zip 无大小限制。
文件数限制:最多 1000 个,超出部分截断(isTruncated 为 true)。
需要在 library 级别开启 enableFileUncompress 功能。

文件解压

uncompressFile 将压缩包中的文件解压到指定目录,无需下载到本地。解压为异步任务,提交后通过任务查询接口轮询进度。
注意:
此功能需在媒体库(library)级别开启 enableFileUncompress 功能后方可使用,未开启时返回 403(FileUncompressNotEnabled)。
// 整包解压
const res = await smh.file.uncompressFile({
spaceId: 'your-space-id',
filePath: '/archive.zip',
uncompress: 1,
uncompressFileRequest: {
targetPath: '/extracted/',
},
});

if (res.status === 202) {
console.log('解压任务已提交,taskId:', res.data.taskId);
}
参数说明
参数名
参数描述
类型
是否必填
spaceId
空间 ID
String
是
filePath
压缩包文件路径
String
是
uncompress
解压标识,固定值为 1
Number
是
conflictResolutionStrategy
冲突处理方式
String
否
uncompressFileRequest.targetPath
解压目标目录路径(必须已存在)
String
是
uncompressFileRequest.targetSpaceId
目标空间 ID(支持跨空间解压,需 admin 权限)
String
否
uncompressFileRequest.selectedFilePaths
指定需解压的文件/文件夹路径列表
Array
否
uncompressFileRequest.password
加密压缩包密码
String
否
返回值:HTTP 202,返回 taskId。
使用限制:
支持格式:zip、tar、gz、7zip、rar、apk
需要在 library 级别开启 enableFileUncompress 功能
支持跨空间解压(需 admin 权限)
支持加密压缩包解压

在线文档编辑

officeEdit 用于打开在线文档编辑入口,支持 Word、Excel、PPT、PDF 系列格式,文件大小不超过 200MB。该接口直接返回编辑器 HTML 页面字符串(非 JSON),可嵌入 iframe 或跳转访问。
注意:
使用本功能前,需先在媒体库级别开启文档编辑能力,否则返回 DocEditNotEnabled 错误。
文件类型不支持时返回 FileTypeNotSupported 错误,文件超过 200MB 时返回 FileSizeExceeded 错误。
使用示例
const res = await smh.file.officeEdit({
spaceId: 'your-space-id',
filePath: '/documents/report.docx',
lang: 'zh_CN',
});

// res.data 为编辑器 HTML 页面字符串,不是 JSON
console.log('Editor HTML length:', res.data.length);
参数说明
参数名
参数描述
类型
是否必填
spaceId
空间 ID
String
是
filePath
待编辑文档的路径
String
是
lang
编辑器语言,如 zh_CN、en
String
否
userId
用户身份识别
String
否

下载文件(底层接口)

downloadFile 用于下载文件。服务端通过 HTTP 302 重定向到真实下载地址,无 JSON 响应体。日常下载建议使用「上传与下载」文档中的高层封装 downloadByUrl(浏览器原生下载,不占内存)或 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 分块上传任务。