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:

ArgumentDescription
endpointAPI endpoint; https:// is added when no scheme is given
regionRegion
access-keyAccess key
secret-keySecret key
bucketBucket name
key-prefixOptional object key prefix, joined with / (alias savekey-prefix)
public-base-urlOptional public download URL prefix (alias bucket-domain)
force-path-styleWhether 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
ArgumentEnvironment variablesDefault
endpointS3_ENDPOINT, MINIO_ENDPOINTRequired
regionS3_REGION, AWS_REGIONus-east-1
access-keyS3_ACCESS_KEY, AWS_ACCESS_KEY_ID, MINIO_ACCESS_KEYRequired
secret-keyS3_SECRET_KEY, AWS_SECRET_ACCESS_KEY, MINIO_SECRET_KEYRequired
bucketS3_BUCKETRequired
key-prefixS3_KEY_PREFIXNone
public-base-urlS3_PUBLIC_BASE_URLUpload URL
force-path-styleS3_FORCE_PATH_STYLEtrue
session-tokenAWS_SESSION_TOKENNone

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.

ArgumentEnvironment variableDescription
access-keyQINIU_ACCESS_KEYRequired
secret-keyQINIU_SECRET_KEYRequired
bucketQINIU_BUCKETRequired (--qiniu-bucket)
bucket-domain, public-base-urlQINIU_PUBLIC_BASE_URLDownload domain (--qiniu-bucket-domain)
savekey-prefix, key-prefixPrepended 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.