Object Storage
September 13, 2026 · View on GitHub
English | 简体中文
The s3, minio, oss, and cos targets share one S3 Signature V4 upload implementation. The qiniu target uses Qiniu's native upload API instead.
S3-compatible Arguments
These arguments apply to s3, minio, oss, and cos:
| Argument | Description |
|---|---|
endpoint | API endpoint; https:// is added when no scheme is given |
region | Region |
access-key | Access key |
secret-key | Secret key |
bucket | Bucket name |
key-prefix | Optional object key prefix, joined with / (alias savekey-prefix) |
public-base-url | Optional public download URL prefix (alias bucket-domain) |
force-path-style | Whether to use path-style URLs (true/false, 1/0, yes/no, on/off) |
The publishing result is <public-base-url>/<key>, or the upload URL when public-base-url is not set.
S3 / MinIO
export S3_ENDPOINT=https://s3.example.com
export S3_ACCESS_KEY=access-key
export S3_SECRET_KEY=secret-key
export S3_BUCKET=downloads
fastforge publish --path dist/app.zip --target s3 \
--publish-arg key-prefix=releases/1.0.0
| Argument | Environment variables | Default |
|---|---|---|
endpoint | S3_ENDPOINT, MINIO_ENDPOINT | Required |
region | S3_REGION, AWS_REGION | us-east-1 |
access-key | S3_ACCESS_KEY, AWS_ACCESS_KEY_ID, MINIO_ACCESS_KEY | Required |
secret-key | S3_SECRET_KEY, AWS_SECRET_ACCESS_KEY, MINIO_SECRET_KEY | Required |
bucket | S3_BUCKET | Required |
key-prefix | S3_KEY_PREFIX | None |
public-base-url | S3_PUBLIC_BASE_URL | Upload URL |
force-path-style | S3_FORCE_PATH_STYLE | true |
session-token | AWS_SESSION_TOKEN | None |
The minio target performs the same upload but reads MINIO_ENDPOINT, MINIO_ACCESS_KEY, and MINIO_SECRET_KEY before the S3_* variables. There are no MINIO_BUCKET or MINIO_REGION variables; use --minio-bucket, --minio-region, and --minio-savekey-prefix, or the S3_* variables.
Qiniu
export QINIU_ACCESS_KEY=access-key
export QINIU_SECRET_KEY=secret-key
export QINIU_BUCKET=downloads
export QINIU_PUBLIC_BASE_URL=https://download.example.com
fastforge publish --path dist/app.zip --target qiniu \
--publish-arg savekey-prefix=releases/1.0.0/
Qiniu uses a form upload with an upload token, and the upload host is detected automatically for the bucket. There are no region, endpoint, or path-style settings.
| Argument | Environment variable | Description |
|---|---|---|
access-key | QINIU_ACCESS_KEY | Required |
secret-key | QINIU_SECRET_KEY | Required |
bucket | QINIU_BUCKET | Required (--qiniu-bucket) |
bucket-domain, public-base-url | QINIU_PUBLIC_BASE_URL | Download domain (--qiniu-bucket-domain) |
savekey-prefix, key-prefix | — | Prepended to the file name as-is; include a trailing / |
The publishing result is <bucket-domain>/<key>. Without a download domain, it is the literal <bucketDomain>/<key>.
Alibaba Cloud OSS
export OSS_ACCESS_KEY=access-key
export OSS_SECRET_KEY=secret-key
export OSS_BUCKET=downloads
export OSS_REGION=cn-hangzhou
fastforge publish --path dist/app.zip --target oss
The region is required. The endpoint can only be set with the endpoint argument and defaults to oss-<region>.aliyuncs.com. Optional variables: OSS_KEY_PREFIX, OSS_PUBLIC_BASE_URL, and OSS_FORCE_PATH_STYLE (default false).
Tencent Cloud COS
export COS_ACCESS_KEY=access-key
export COS_SECRET_KEY=secret-key
export COS_BUCKET=downloads-1250000000
export COS_REGION=ap-guangzhou
fastforge publish --path dist/app.zip --target cos
The region is required. The endpoint can only be set with the endpoint argument and defaults to cos.<region>.myqcloud.com. Optional variables: COS_KEY_PREFIX, COS_PUBLIC_BASE_URL, and COS_FORCE_PATH_STYLE (default false).
Access keys and secret keys can also be passed as arguments, but prefer environment variables so they do not end up in command history.