s3-api
S3 API
S3 API
T4 implements the subset of S3 that everyday tools use. Path-style endpoint:
https://t4.dalang.io/{bucket}/{key}
Supported
| Operation | Notes |
|---|---|
ListBuckets, CreateBucket, HeadBucket, DeleteBucket | a bucket must be empty before deletion |
PutObject, GetObject, HeadObject, DeleteObject | Range supported |
DeleteObjects | up to 1,000 keys per request |
ListObjectsV2 | prefix, delimiter, max-keys, continuation-token, start-after |
CopyObject | within the same bucket |
| Multipart | create, upload part, complete, abort, list parts |
| Presigned URLs | GET, PUT, HEAD, DELETE; maximum 7 days |
GetBucketLocation, GetBucketVersioning | versioning is always Suspended |
Unsupported operations return 501 NotImplemented rather than half-working behaviour: ACL, policy, CORS, lifecycle, tagging, object lock, select, inventory, and ListObjects v1.
Authentication
Header Authorization: AWS4-HMAC-SHA256 or a presigned query. service must be s3; any region is accepted. The payload hash may be SHA-256, UNSIGNED-PAYLOAD, or STREAMING-AWS4-HMAC-SHA256-PAYLOAD (aws-chunked).
The server clock must be within ±15 minutes of the client.
ETag
PutObjectandCopyObject: MD5 of the content.- Multipart:
md5(concat(md5(part)))-part_count, exactly like S3.
Errors
Standard XML:
<Error>
<Code>NoSuchKey</Code>
<Message>objek tidak ditemukan</Message>
<Resource>assets/report.pdf</Resource>
<RequestId>…</RequestId>
</Error>
Common codes: SignatureDoesNotMatch, InvalidAccessKeyId, RequestTimeTooSkewed, NoSuchBucket, NoSuchKey, BucketNotEmpty, BucketAlreadyOwnedByYou, InvalidBucketName, EntityTooLarge, InvalidRange, NotImplemented.
Metadata
Content-Typeis stored and returned.x-amz-meta-*headers are stored as-is.Last-Modifiedis UTC.
See also Limits and Signed URLs.