Complete S3 setup · Bitiful (Recommended)
Bitiful setup (Recommended)
Bitiful is ShrimpSend’s top recommended custom S3 provider: S3-compatible API, pay-as-you-go billing, and pricing that is often lower than major domestic clouds. See the official price comparison.
When to use
- You want cost-effective object storage with a stable S3-compatible service in China.
- You manage your own bucket and access keys on Bitiful.
Create a bucket
- Sign in to the Bitiful console.
- Create a new bucket. For security, use a private bucket.


Endpoint and region
On the bucket details page, find the service endpoint and availability zone:

- Endpoint must be
https://s3.bitiful.net— thehttps://prefix is required; do not omit it or usehttp://. - Region is the availability zone code shown in the console.
Create Access Key / Secret Key
- Add a sub-account (the sub-account name must not match the bucket name, or uploads may fail):

- Grant read and write permissions to the sub-account:

- Create a key for the sub-account and save the Access Key ID and Secret Access Key:


Configure CORS
Browser uploads require bucket CORS. Add a rule with Allowed Origins including at least:
https://xiachuan.net
Add https://www.xiachuan.net if you use the www subdomain. Allowed Methods: GET, PUT, POST, DELETE, HEAD. AllowedHeaders: * recommended. ExposeHeaders: at least ETag.
ShrimpSend settings
Open S3 configuration from either entry point:
- Settings → S3 — saved globally for all devices signed into the same account.
- S3 cloud relay session — open the S3 cloud relay chat and use S3 settings inside the session.
Fill in the fields from the Bitiful console:
| Field | Notes |
|---|---|
| Endpoint | Must be https://s3.bitiful.net (include https://; do not omit) |
| Region | Availability zone from bucket details |
| Bucket | Bucket name |
| Path-style access | Off (Bitiful uses virtual-hosted-style URLs) |
| Access Key ID | Sub-account key access key |
| Secret Access Key | Sub-account key secret |

Test connection
After saving, click Test connection. If it fails, check:
- Endpoint includes
https://. - Region and Bucket match the console.
- Sub-account has read/write on the bucket.
- CORS includes your web Origin.
- Sub-account name does not conflict with the bucket name.