dodil data object
Manage objects in a K3 bucket — create (upload), show, list, url (presign), remove. All object subcommands take a required -b/--bucket flag (persistent on the group).
There is also a dodil data object destination subgroup. It is not a Storage command: an object destination is a pipeline with an object facet, its subcommands take a pipeline id, and it is documented under Pipelines → CLI Guide.
dodil data object createuploads over HTTPPUTto the S3 object gateway —https://object.<region>.dodil.io/<bucket>/<key>— not to--api-endpoint, which is a gRPChost:port. Every other subcommand on this page is a gRPCStorageServicecall. See Objects — byte plane.
dodil data object create
dodil data object create [path] -b BUCKET [-k KEY] [-r]Uploads a local file as an object, or with -r/--recursive a whole directory tree. If --key is omitted for a single file, the object key defaults to the file’s base name.
| Flag | Short | Type | Description |
|---|---|---|---|
--bucket | -b | string | Required. Target bucket name. |
--key | -k | string | Single file: the full object key (defaults to the file’s base name). With --recursive: a key prefix. |
--recursive | -r | bool | Upload a directory tree. Each key is the file’s path relative to [path], forward-slashed. |
Passing a directory without --recursive is an error. With --recursive the CLI walks the tree, uploads file by file, prints a progress bar to stderr, and exits non-zero if any file failed; -o json returns {bucket, uploaded, failed, objects[]} instead.
Examples:
# Key defaults to "sample.pdf"
dodil data object create ./sample.pdf -b kb-prod
# Explicit key with prefix
dodil data object create ./contract.pdf -b kb-prod -k docs/contract.pdf
# Whole tree — ./site/css/app.css becomes assets/css/app.css
dodil data object create ./site -b kb-prod --recursive --key assetsFor anything larger than a handful of files, an S3 client is the better tool — it parallelises, resumes and diffs, none of which this command does:
aws s3 sync ./site s3://kb-prod/assets/ \
--endpoint-url https://object.uk-lon-1.dodil.iododil data object show
dodil data object show [key] -b BUCKETCalls GetObjectInfo and returns object metadata (ObjectInfo — size, etag, content-type, per-pipeline index status). Pass the key unencoded; the CLI sends it as a gRPC field, so there is no %2F escaping to do here.
The default output prints only four fields — Key, Bucket, Size, LastModified (as raw Unix milliseconds). Use -o json for the full ObjectInfo, including indexStatus and pipelineStatuses:
dodil data object show docs/contract.pdf -b kb-prod -o jsonSee Core Concepts → Object for the type signature.
dodil data object list
dodil data object list -b BUCKETLists objects in the bucket. Filtering by prefix / delimiter / pagination exists on the ListObjects API but is not surfaced as CLI flags today, so this is a first-page-only view: the server default of 1000 keys applies and the CLI never follows nextContinuationToken.
The table prints KEY, SIZE and LAST MODIFIED (raw Unix milliseconds). -o yaml is accepted by the global flag but not implemented here — anything other than json falls through to the table. Keys under the K3-managed _warehouse/ and _vector/ prefixes are filtered out server-side and will not appear.
For prefix filters, paging or a machine-readable listing at scale, use an S3 client:
aws s3 ls s3://kb-prod/docs/ --recursive \
--endpoint-url https://object.uk-lon-1.dodil.iododil data object url
dodil data object url [key] -b BUCKET [--expires SECS]Generates a pre-signed URL for an object — mirrors GetObjectUrl. Default output prints just the URL on stdout (pipe-friendly); -o json returns the full GetObjectUrlResponse (url + expiresAt).
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--bucket | -b | string | — | Required. Target bucket name. |
--expires | — | int | 3600 | URL expiry in seconds. Silently clamped to 86400 (24h) server-side — asking for more is not an error. |
The URL points at the object gateway, not at the control plane, and carries X-K3-Token / X-K3-Expires / X-K3-Org:
https://object.uk-lon-1.dodil.io/kb-prod/docs/contract.pdf?X-K3-Token=…&X-K3-Expires=…&X-K3-Org=…It is a K3-token URL, not AWS SigV4, and it grants GET only — a browser upload needs a SigV4 presign minted by an S3 SDK instead. The token is a live credential for that one object: treat the output as a secret.
Examples:
# 1h URL (default) — pipe-friendly, just the URL is printed
URL=$(dodil data object url docs/contract.pdf -b kb-prod)
curl "$URL" --output contract.pdf
# 15 minutes
dodil data object url docs/contract.pdf -b kb-prod --expires 900
# Full response (url + expiresAt, Unix millis) for clients that need the timestamp
dodil data object url docs/contract.pdf -b kb-prod -o jsondodil data object remove
dodil data object remove [key] -b BUCKETDeletes an object from a bucket, via gRPC DeleteObject — the same operation the admin route DELETE /:bucket/objects/:key serves. The S3-protocol delete (DELETE /:bucket/:key, no /objects/ segment) goes through the gateway proxy and cleans up identically.
Removing a key that does not exist succeeds silently — the underlying S3 delete is idempotent and nothing turns that into an error. Index/ingest cleanup is fire-and-forget, so object show may briefly disagree with reality after a delete.
Example:
dodil data object remove docs/contract.pdf -b kb-prodSee also
- Objects — API Reference — byte-plane (PUT/GET/HEAD via S3) + admin contracts
- Core Concepts → Object —
ObjectInfotype dodil data bucket·dodil data bucket policy·dodil data bucket cors·dodil data mount