@yuntools/ali-oss
Version:
阿里云 OSS 命令行工具 ossutil 封装,支持 ESM,CJS 导入,提供 TypeScript 类型定义
156 lines (123 loc) • 4.13 kB
text/typescript
import assert from 'node:assert'
import { undefined } from '../config.js'
import { commonProcessInputMap } from '../helper.js'
import {
ACLKey,
Config,
DataBase,
DataKey,
ParamMap,
PlaceholderKey,
} from '../types.js'
import { initOptions as mvOptions, MvOptions } from './mv.js'
/**
* @link https://help.aliyun.com/document_detail/120057.html
*/
export interface CpOptions extends MvOptions {
/** 目的 cloudurl 路径,不包括 bucket */
target: string
/** 源路径,可以是本地文件或 cloudurl */
src: string
/**
* 设置断点续传文件的大小阈值,单位为字节
* @default 100 * 1024 * 1024 (100MB)
*/
bigfileThreshold?: number | undefined
/** 指定断点续传记录信息所在的目录 */
checkpointDir?: string | undefined
/**
* 上传链接子目录,默认不上传
* @default false
* */
enableSymlinkDir?: boolean | undefined
/**
* 表示上传文件时不为目录生成Object
* @default false
*/
disableCrc64?: boolean | undefined
/** 批量操作时不忽略错误 */
disableIgnoreError?: boolean | undefined
/** 仅上传当前目录下的文件,忽略子目录及子目录下的文件 */
onlyCurrentDir?: boolean | undefined
/** 设置分片大小,单位为字节 */
partSize?: number | undefined
/** 指定保存上传文件时的快照信息所在的目录。在下一次上传文件时,ossutil会读取指定目录下的快照信息进行增量上传 */
snapshotPath?: string | undefined
/**
* @default ACLKey.default
*/
acl?: ACLKey | undefined
/** 不包含任何符合指定条件的文件 */
exclude?: string | undefined
/** 包含符合指定条件的所有文件 */
include?: string | undefined
/**
* 多文件操作时的并发任务数
* @default 3
*/
jobs?: number | undefined
/**
* 最大上传速度,单位为 KB/s
* @default 0 不限制上传速度
*/
maxupspeed?: number | undefined
/** 文件的元信息。包括部分HTTP标准属性(HTTP Header)以及以x-oss-meta-开头的用户自定义元数据 */
meta?: string | undefined
/** 请求的支付方式。如果希望访问指定路径下的资源产生的流量、请求次数等费用由请求者支付,请将此选项的值设置为requester */
payer?: string | undefined
/** 单文件操作时的并发任务数,取值范围为 1~10000 */
parallel?: number | undefined
/**
* 上传文件时设置标签信息,格式为 `TagkeyA=TagvalueA&TagkeyB=TagvalueB....`
*/
tagging?: string | undefined
/** 只有当目标文件不存在,或源文件的最后修改时间晚于目标文件时,才会执行上传操作 */
update?: boolean | undefined
}
export const initOptions: CpOptions = {
...mvOptions,
bigfileThreshold: undefined,
checkpointDir: undefined,
disableCrc64: undefined,
disableIgnoreError: undefined,
enableSymlinkDir: undefined,
onlyCurrentDir: undefined,
partSize: undefined,
snapshotPath: undefined,
acl: undefined,
exclude: undefined,
force: false,
jobs: undefined,
include: undefined,
maxupspeed: 0,
meta: undefined,
parallel: undefined,
payer: undefined,
recursive: false,
tagging: undefined,
update: false,
}
export interface DataCp extends DataBase {
/** byte/s */
[DataKey.averageSpeed]: number | undefined
[DataKey.succeedTotalNumber]: number | undefined
[DataKey.succeedTotalSize]: string | undefined
[DataKey.uploadDirs]: number
[DataKey.uploadFiles]: number
/** sync between cloud */
[DataKey.copyObjects]: number
}
export async function processInput(
input: CpOptions,
globalConfig: Config | undefined,
): Promise<ParamMap> {
const map = commonProcessInputMap(input, initOptions, globalConfig)
assert(map.get(PlaceholderKey.dest), 'dest is required')
const bucket = map.get(PlaceholderKey.bucket)
assert(bucket, 'bucket is required')
assert(typeof bucket === 'string', 'bucket must be string')
const src = map.get(PlaceholderKey.src)
assert(src, 'src is required')
assert(typeof src === 'string')
return map
}