Skip to content

引入

ts
import {
  unfreezeCosImage,
  batchUnfreezeCosImages,
  getCosBucket,
  uploadCOSFile,
  getCOSBucketList,
  deleteCOSMultipleObject,
  getCOSInstance,
  onUploadCOSProgress,
  getCosHeadObject,
  downloadCosObject,
  isCosObjectSameAsLocal,
  uploadCOSStreamFile,
  uploadCOSStreamFileV2,
  getCosObjectUrl
} from 't-comm';

// 不支持 tree-shaking 的项目
import {
  unfreezeCosImage,
  batchUnfreezeCosImages,
  getCosBucket,
  uploadCOSFile,
  getCOSBucketList,
  deleteCOSMultipleObject,
  getCOSInstance,
  onUploadCOSProgress,
  getCosHeadObject,
  downloadCosObject,
  isCosObjectSameAsLocal,
  uploadCOSStreamFile,
  uploadCOSStreamFileV2,
  getCosObjectUrl
} from 't-comm/lib/tencent-cloud/cos/index';

// 只支持 ESM 的项目
import {
  unfreezeCosImage,
  batchUnfreezeCosImages,
  getCosBucket,
  uploadCOSFile,
  getCOSBucketList,
  deleteCOSMultipleObject,
  getCOSInstance,
  onUploadCOSProgress,
  getCosHeadObject,
  downloadCosObject,
  isCosObjectSameAsLocal,
  uploadCOSStreamFile,
  uploadCOSStreamFileV2,
  getCosObjectUrl
} from 't-comm/es/tencent-cloud/cos/index';

unfreezeCosImage(config)

描述:解除腾讯云 COS 图片封禁

  • 当图片因内容审核被封禁后,可调用此方法解除封禁
  • 底层通过 putObjectCopy 设置 x-cos-forbid-state: 0 来解除封禁状态

Throws:

  • 当参数不全时会抛出错误

参数

参数名类型描述
configobject配置信息
config.secretIdstring腾讯云 SecretId
config.secretKeystring腾讯云 SecretKey
config.bucketstringCOS 存储桶名称(如 'my-bucket-1250000000')
config.regionstringCOS 存储桶所在区域(如 'ap-guangzhou')
config.keystring被封禁的对象键(Object Key),即图片在存储桶中的路径

返回: Promise.<object>

解封结果

示例

ts
// 解除单张图片的封禁
await unfreezeCosImage({
  secretId: 'your-secret-id',
  secretKey: 'your-secret-key',
  bucket: 'my-bucket-1250000000',
  region: 'ap-guangzhou',
  key: 'images/photo.jpg',
});

batchUnfreezeCosImages(config)

描述:批量解除腾讯云 COS 图片封禁

  • 对多张被封禁的图片并行执行解封操作
  • 底层通过 Promise.allSettled 并发调用 unfreezeCosImage

参数

参数名类型描述
configobject配置信息
config.secretIdstring腾讯云 SecretId
config.secretKeystring腾讯云 SecretKey
config.bucketstringCOS 存储桶名称(如 'my-bucket-1250000000')
config.regionstringCOS 存储桶所在区域(如 'ap-guangzhou')
config.keysArray<string>被封禁的对象键列表

返回: Promise.<Array<object>>

每张图片的解封结果数组,包含 key、success、data/error 字段

示例

ts
const results = await batchUnfreezeCosImages({
  secretId: 'your-secret-id',
  secretKey: 'your-secret-key',
  bucket: 'my-bucket-1250000000',
  region: 'ap-guangzhou',
  keys: ['images/photo1.jpg', 'images/photo2.jpg'],
});

results.forEach(r => {
  if (r.success) {
    console.log(`${r.key} 解封成功`);
  } else {
    console.error(`${r.key} 解封失败:`, r.error);
  }
});

getCosBucket(secretId, secretKey, bucket, region, prefix, delimiter, maxKeys, marker, encodingType)

描述:获取腾讯云COS存储桶中的对象列表

Throws:

  • 当参数不全时会抛出错误

参数

参数名描述
secretId腾讯云API密钥ID
secretKey腾讯云API密钥Key
bucketCOS存储桶名称
regionCOS存储桶所在区域
prefix对象键前缀匹配,限定返回中只包含指定前缀的对象键(可选)
delimiter定界符,用于对对象键进行分组,一般是传/(可选)
maxKeys单次返回最大的条目数量,默认1000,最大为1000(可选)
marker起始对象键标记,列出从Marker开始MaxKeys条目(可选)
encodingType返回值的编码方式,可选值:url(可选)

返回: Promise对象,成功时返回存储桶内容数据,失败时返回错误信息

示例

typescript
getCosBucket({
  secretId: 'your-secret-id',
  secretKey: 'your-secret-key',
  bucket: 'test-bucket',
  region: 'ap-beijing'
})
.then(data => console.log(data))
.catch(err => console.error(err));

uploadCOSFile(config)

描述:COS上传

参数

参数名类型描述
configobject配置信息
config.filesArray<object>文件列表
config.files.keystring文件key
config.files.pathstring文件路径
[config.files.ContentType]string文件 MIME 类型(如 image/svg+xml),不传则由 COS 根据扩展名推断
config.secretIdstringCOS secretId
config.secretKeystringCOS secretKey
config.bucketstringCOS bucket
config.regionstringCOS region

返回: Promise.<object>

请求Promise

示例

typescript
uploadCOSFile({
  files: [{
    key: 'key1',
    path: 'path1',
  }, {
    key: 'key2',
    path: 'path2',
  }],
  secretId: 'xxx',
  secretKey: 'xxx',
  bucket: 'xxx',
  region: 'xxx',
})

getCOSBucketList(config)

描述:获取 COS 存储桶中的文件列表

参数

参数名类型描述
configobject配置信息
config.secretIdstringCOS secretId
config.secretKeystringCOS secretKey
config.bucketstringCOS bucket
config.regionstringCOS region
config.prefixstring文件前缀过滤

返回: Promise.<Array<ICosMeta>>

文件元信息列表

示例

ts
const list = await getCOSBucketList({
  secretId: 'xxx',
  secretKey: 'xxx',
  bucket: 'my-bucket-1250000000',
  region: 'ap-guangzhou',
  prefix: 'static/',
});

deleteCOSMultipleObject(config)

描述:批量删除 COS 存储桶中的多个对象

参数

参数名类型描述
configobject配置信息
config.secretIdstringCOS secretId
config.secretKeystringCOS secretKey
config.keysArray<string>要删除的对象 key 列表
config.bucketstringCOS bucket
config.regionstringCOS region

返回: Promise.<any>

删除结果

示例

ts
await deleteCOSMultipleObject({
  secretId: 'xxx',
  secretKey: 'xxx',
  keys: ['static/old-file1.js', 'static/old-file2.js'],
  bucket: 'my-bucket-1250000000',
  region: 'ap-guangzhou',
});

getCOSInstance(secretId, secretKey)

描述:获取腾讯云 COS SDK 实例 创建并返回一个配置好的 COS 客户端实例

参数

参数名描述
secretId腾讯云 SecretId
secretKey腾讯云 SecretKey

返回: COS SDK 实例

示例

ts
const cos = getCOSInstance('your-secret-id', 'your-secret-key');
// 使用 cos 实例进行文件操作

onUploadCOSProgress(info)

描述:COS 文件上传进度回调函数 显示上传进度、速度、已上传大小和总大小

参数

参数名描述
info上传进度信息
info.percent上传进度百分比(0-1)
info.speed上传速度(字节/秒)
info.total文件总大小(字节)
info.loaded已上传大小(字节)

示例

ts
onUploadCOSProgress({
  percent: 0.5,
  speed: 1024000,
  total: 10240000,
  loaded: 5120000
});
// 输出: 总共:9.77 MB,已上传:4.88 MB,进度:50%,速度:1000.00 KB/s

getCosHeadObject(secretId, secretKey, bucket, region, key)

描述:获取腾讯云COS对象的元数据信息(不返回对象内容)

Throws:

  • 当参数不全时会抛出错误

参数

参数名描述
secretId腾讯云API密钥ID
secretKey腾讯云API密钥Key
bucketCOS存储桶名称
regionCOS存储桶所在区域
key对象键(Object Key),对象在存储桶中的唯一标识

返回: Promise对象,成功时返回对象的元数据信息(如大小、修改时间等),失败时返回错误信息

示例

typescript
getCosHeadObject({
  secretId: 'your-secret-id',
  secretKey: 'your-secret-key',
  bucket: 'test-bucket',
  region: 'ap-beijing',
  key: 'path/to/file.txt'
})
.then(data => console.log(data))
.catch(err => console.error(err));

downloadCosObject(secretId, secretKey, bucket, region, key, output)

描述:下载腾讯云COS对象内容

Throws:

  • 当参数不全时会抛出错误

参数

参数名描述
secretId腾讯云API密钥ID
secretKey腾讯云API密钥Key
bucketCOS存储桶名称
regionCOS存储桶所在区域
key对象键(Object Key),对象在存储桶中的唯一标识
output输出路径或输出流,可选参数。如果指定,对象内容将写入该路径或流

返回: Promise对象,成功时返回对象内容数据,失败时返回错误信息

示例

typescript
// 下载到内存
downloadCosObject({
  secretId: 'your-secret-id',
  secretKey: 'your-secret-key',
  bucket: 'test-bucket',
  region: 'ap-beijing',
  key: 'path/to/file.txt'
})
.then(data => console.log(data))
.catch(err => console.error(err));

// 下载到文件
downloadCosObject({
  secretId: 'your-secret-id',
  secretKey: 'your-secret-key',
  bucket: 'test-bucket',
  region: 'ap-beijing',
  key: 'path/to/file.txt',
  output: './local/file.txt'
})
.then(data => console.log('下载成功'))
.catch(err => console.error(err));

isCosObjectSameAsLocal(secretId, secretKey, bucket, region, key, localFilePath)

描述:判断 COS 对象与本地文件是否一致(基于 size 与 ETag/MD5) 实现说明:

    - 先比较文件大小(HEAD 返回的 Content-Length 与本地 stat().size);不一致直接判定为不同。 - 大小一致时,再比较 MD5:
  1. 优先使用 COS 的 `x-cos-meta-md5`(上传时显式设置的元数据,最可靠); - 否则使用 ETag(仅当对象为简单上传,即 ETag 不含连字符 `-` 时才视为整体 MD5;分块上传 ETag 不可用于直接比较)。

参数

参数名描述
secretId腾讯云 API 密钥 ID
secretKey腾讯云 API 密钥 Key
bucketCOS 存储桶名称
regionCOS 存储桶所在区域
key对象键
localFilePath本地文件路径

返回: Promise.<boolean>

一致返回 true,否则 false(本地文件不存在或对象不存在也返回 false)

示例

typescript
const same = await isCosObjectSameAsLocal({
  secretId, secretKey,
  bucket: 'test-bucket', region: 'ap-beijing',
  key: 'path/to/file.txt',
  localFilePath: './local/file.txt',
});
if (!same) {
  // 重新上传
}

uploadCOSStreamFile(config)

描述:以流式方式上传文件到腾讯云 COS(使用 putObject 简单上传) 支持通过文件路径或 Buffer 上传,适用于大文件或流式场景 注意:单次上传大小限制为 5GB,超大文件请使用 uploadCOSStreamFileV2

参数

参数名类型描述
configobject配置信息
config.fileobject文件信息
[config.file.path]string文件路径(与 buffer 二选一)
config.file.sizenumber文件大小(字节)
[config.file.buffer]Buffer文件 Buffer(与 path 二选一)
config.keystringCOS 对象键(如 'images/test.png')
config.secretIdstringCOS secretId
config.secretKeystringCOS secretKey
config.bucketstringCOS bucket
config.regionstringCOS region

返回: Promise.<any>

上传结果

示例

ts
await uploadCOSStreamFile({
  file: { path: '/tmp/test.png', size: 1024 },
  key: 'images/test.png',
  secretId: 'xxx',
  secretKey: 'xxx',
  bucket: 'my-bucket-1250000000',
  region: 'ap-guangzhou',
});

uploadCOSStreamFileV2(config)

描述:以高级上传方式上传文件到腾讯云 COS(使用 uploadFile,SDK 自动决定分块或简单上传) 适用于大文件上传,支持自动分块和断点续传

参数

参数名类型默认值描述
configobject配置信息
config.fileobject文件信息
config.file.pathstring文件路径(必填)
config.file.sizenumber文件大小(字节)
config.keystringCOS 对象键(如 'images/test.png')
config.secretIdstringCOS secretId
config.secretKeystringCOS secretKey
config.bucketstringCOS bucket
config.regionstringCOS region
[config.sliceSize]number5242880分块大小,默认 5MB

返回: Promise.<any>

上传结果

示例

ts
await uploadCOSStreamFileV2({
  file: { path: '/tmp/large-file.zip', size: 104857600 },
  key: 'files/large-file.zip',
  secretId: 'xxx',
  secretKey: 'xxx',
  bucket: 'my-bucket-1250000000',
  region: 'ap-guangzhou',
  sliceSize: 1024 * 1024 * 10, // 10MB
});

getCosObjectUrl(secretId, secretKey, bucket, region, key, sign, expires, method, protocol, domain, query, headers, forceDownload)

描述:获取腾讯云 COS 存储桶中对象的访问 URL

Throws:

  • 当参数不全时会抛出错误

参数

参数名描述
secretId腾讯云 API 密钥 ID
secretKey腾讯云 API 密钥 Key
bucketCOS 存储桶名称
regionCOS 存储桶所在区域,例如 ap-beijing
key存储在桶里的对象键(例如 1.jpg、a/b/test.txt),支持中文
sign是否获取带签名的对象 URL,默认 true(可选)
expires签名 URL 的有效时长,单位秒,默认 900 秒(可选)
method请求方法,默认 GET(可选)
protocol请求协议,可选值:http:、https:(可选)
domain自定义域名(可选)
query请求中的 query 参数(可选)
headers请求中的 header 参数(可选)
forceDownload是否强制下载,传入下载后的文件名后将拼接 response-content-disposition 参数(可选)

返回: Promise 对象,成功时返回对象访问 URL 字符串,失败时返回错误信息

示例

typescript
getCosObjectUrl({
  secretId: 'your-secret-id',
  secretKey: 'your-secret-key',
  bucket: 'examplebucket-1250000000',
  region: 'ap-beijing',
  key: '头像.jpg',
  sign: true,
})
.then(url => console.log(url))
.catch(err => console.error(err));