这样吧,你封装成一个 npm 包好了,名字就叫 @web.worker/s3-upload-folder,用户可以通过 npx @web.worker/s3-upload-folder --dist dist/ --ak xx --sk xx --endpoint xx --bucket xx ,可能还有我没想到的。你做个补充。使用 esm+ts 实现。
一个基于 ESM + TypeScript 实现的命令行工具,用于将本地文件夹递归上传至 S3 兼容的对象存储服务。该工具可直接通过 npx 使用,无需额外安装。
通过以下命令上传文件夹:
npx @web.worker/s3-upload-folder \
--dist $DIST_PATH \
--ak $ACCESS_KEY \
--sk $SECRET_KEY \
--endpoint $ENDPOINT \
--region $REGION \
--bucket $BUCKET_NAME \
--prefix /
--dist
:本地目录路径,待上传的文件夹 (必填)。--ak
:Access Key ID (必填)。--sk
:Secret Access Key (必填)。--bucket
:目标存储桶名称 (必填)。--endpoint
:S3 接口的 endpoint(对于非 AWS 服务可选)。--region
:存储区域,默认值为us-east-1
。--prefix
:上传至存储桶的远程路径前缀,默认留空。--forcePathStyle
:是否采用路径风格访问,默认开启。
-
递归读取本地文件夹
工具采用 Node.js 内置的fs
模块,通过递归方式读取指定目录下的所有文件,将子文件夹及文件一并遍历。 -
上传逻辑
利用 AWS SDK v3 中的S3Client
和PutObjectCommand
命令,逐个将文件内容上传至目标存储桶。-
进度提示
采用内置进度条实现,每个文件上传成功或失败后,调用专门的updateProgress
函数更新上传进度,并在命令行实时显示当前进度。 -
并发上传
通过将文件分批(每批同时最多上传maxConcurrentUploads
个文件)执行并发上传操作,从而有效提升上传速度。
-
-
错误处理
每个文件上传均独立执行,若上传失败则打印具体的错误信息,便于用户排查。
- ESM 模块:采用原生 ESM 模块语法,支持现代 JavaScript 和 TypeScript。
- TypeScript:通过 TypeScript 提供类型检查和代码提示,保证程序的健壮性。
- Commander:用于解析命令行参数,提升 CLI 使用体验。
- AWS SDK v3:简化与 S3 兼容存储服务的交互。
s3uploadFolder/
├── src/
│ ├── cli.ts // 命令行入口,负责参数解析和调用上传逻辑
│ ├── upload.ts // 文件上传核心逻辑,包括递归读取目录和调用 SDK 命令
├── package.json // npm 包配置及依赖管理
├── tsconfig.json // TypeScript 编译配置
├── README.md // 项目使用说明
-
安装依赖
在项目根目录下执行:
npm install
-
构建项目
执行以下命令生成
dist
文件夹:npm run build
-
发布到 npm
登录 npm 并发布:
npm login npm publish --access public
- 上传进度提示:可添加进度条显示上传进度。
- 并发上传:通过并发控制优化上传速度。
- 分片上传:支持大文件的分片上传功能。