一个轻量级的 CLI 工具,用于将文件或文件夹上传到 S3 兼容的对象存储服务(AWS S3、阿里云 OSS、MinIO 等)。
- 📦 支持单文件和文件夹上传
- 🚀 并发上传,提升速度
- 📊 实时进度显示
- 🎯 自动检测文件 MIME 类型
- 🔧 支持所有 S3 兼容服务
- 💻 零配置,开箱即用
使用 npx 直接运行,无需安装:
# 上传文件夹
npx @web.worker/s3-upload-folder \
--dist ./dist \
--bucket my-bucket \
--ak YOUR_ACCESS_KEY \
--sk YOUR_SECRET_KEY \
--endpoint https://oss-cn-hangzhou.aliyuncs.com
# 上传单个文件
npx @web.worker/s3-upload-folder \
--file index.html \
--bucket my-bucket \
--ak YOUR_ACCESS_KEY \
--sk YOUR_SECRET_KEY \
--endpoint https://oss-cn-hangzhou.aliyuncs.com| 参数 | 简写 | 说明 |
|---|---|---|
--dist |
-d |
本地文件夹路径(上传文件夹时必选) |
--file |
- | 单个文件路径(上传单文件时必选) |
--bucket |
-b |
目标 S3 bucket 名称 |
--ak |
- | Access Key ID |
--sk |
- | Secret Access Key |
| 参数 | 简写 | 默认值 | 说明 |
|---|---|---|---|
--endpoint |
-e |
- | S3 endpoint URL(用于非 AWS 服务) |
--region |
-r |
us-east-1 |
AWS region |
--prefix |
-p |
"" |
远程路径前缀 |
--forcePathStyle |
- | true |
启用 path-style 访问 |
--content-type |
- | 自动检测 | 指定 Content-Type(仅单文件上传) |
--version |
-v |
- | 显示版本号 |
| 模式 | 使用场景 | 特点 |
|---|---|---|
| 文件夹上传 | 部署静态网站、批量上传 | 递归上传所有文件,自动检测 MIME 类型,显示进度条 |
| 单文件上传 | 上传单个文件、指定 Content-Type | 快速上传,可手动指定 MIME 类型 |
npx @web.worker/s3-upload-folder \
--dist ./build \
--bucket my-website \
--ak AKIAIOSFODNN7EXAMPLE \
--sk wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY \
--region us-west-2 \
--forcePathStyle falsenpx @web.worker/s3-upload-folder \
--dist ./dist \
--bucket my-bucket \
--ak LTAI5t... \
--sk xxx \
--endpoint https://oss-cn-hangzhou.aliyuncs.comnpx @web.worker/s3-upload-folder \
--dist ./public \
--bucket my-bucket \
--ak minioadmin \
--sk minioadmin \
--endpoint http://localhost:9000# 上传到 bucket 的 static/v1.0/ 目录下
npx @web.worker/s3-upload-folder \
--dist ./dist \
--bucket my-bucket \
--ak xxx \
--sk xxx \
--endpoint https://oss-cn-hangzhou.aliyuncs.com \
--prefix static/v1.0/# 自动检测 Content-Type
npx @web.worker/s3-upload-folder \
--file index.html \
--bucket my-bucket \
--ak xxx \
--sk xxx \
--endpoint https://oss-cn-hangzhou.aliyuncs.com
# 手动指定 Content-Type
npx @web.worker/s3-upload-folder \
--file data.bin \
--bucket my-bucket \
--ak xxx \
--sk xxx \
--endpoint https://oss-cn-hangzhou.aliyuncs.com \
--content-type application/octet-stream- 运行时: Bun
- 语言: TypeScript (ESM)
- SDK: AWS SDK v3 (
@aws-sdk/client-s3) - 参数解析: 自定义解析器
使用 Node.js 内置 fs 模块递归读取文件夹,支持任意深度的目录结构。
默认每批上传 5 个文件,通过 Promise.all 实现并发控制,显著提升上传速度。
根据文件扩展名自动检测 Content-Type,支持常见文件类型:
- HTML/CSS/JS
- 图片(PNG、JPG、SVG、WebP 等)
- 字体(WOFF、WOFF2、TTF)
- 文档(PDF、JSON、XML 等)
上传文件夹时显示进度条:
[====================] 45/45 (100%)
s3uploade/
├── src/
│ ├── index.ts # CLI 入口,参数解析
│ ├── upload.ts # 核心上传逻辑
│ └── upload.test.ts # 单元测试
├── dist/ # 构建输出
├── package.json
├── tsconfig.json
└── readme.md
bun installbun run buildbun test# 构建后测试
./dist/index.js --file test.html --bucket test --ak xxx --sk xxxA: 使用 --endpoint 参数指定 OSS endpoint:
--endpoint https://oss-cn-hangzhou.aliyuncs.comA: 检查以下几点:
- Access Key 和 Secret Key 是否正确
- Bucket 是否存在且有写入权限
- Endpoint 是否正确(非 AWS 服务必须指定)
- 网络连接是否正常
A:
- 文件夹上传:自动根据文件扩展名检测
- 单文件上传:自动检测,也可使用
--content-type手动指定
A: 支持所有实现 S3 API 的服务,包括:
- AWS S3
- 阿里云 OSS
- 腾讯云 COS
- MinIO
- Cloudflare R2
- DigitalOcean Spaces
A: 工具默认使用并发上传(每批 5 个文件),已经优化了速度。如需进一步优化,可以:
- 使用更快的网络连接
- 选择地理位置更近的 region/endpoint
ISC
Otto_WebWorkerPodcast