> For the complete documentation index, see [llms.txt](https://docs.ionos.com/cloud/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.ionos.com/cloud/tools-cli/subcommands/object-storage/object/put.md).

# put

Upload a local file as an object

## Usage

```
ionosctl object-storage object put [flags]
```

## Aliases

For `object-storage` command:

```
[os]
```

For `object` command:

```
[obj]
```

For `put` command:

```
[p]
```

## Description

Upload a local file into a bucket, stored under the key you choose with --key.

The key is the object's full name in the bucket, including any "/" separators you want to appear as a pseudo-folder path (e.g. photos/2025/image.jpg). The key does NOT have to match the source filename. If the key already exists it is overwritten; on a versioning-enabled bucket the overwrite creates a new version rather than destroying the old bytes.

\--content-type sets the object's MIME type, which the service stores and returns as the Content-Type header on later downloads (it drives how browsers and clients interpret the bytes). If omitted, it is auto-detected from the source file extension, falling back to application/octet-stream when the extension is unknown.

The whole file is read from --source and uploaded as the object body.

## Options

```
  -u, --api-url string        Override default host URL. If contains placeholder, location will be embedded. Preferred over the config file override 'objectstorage' and env var 'IONOS_API_URL' (default "https://s3.%s.ionoscloud.com")
      --cols strings          Set of columns to be printed on output 
                              Available columns: [Key ContentType ContentLength LastModified ETag]
  -c, --config string         Configuration file used for authentication (default "$XDG_CONFIG_HOME/ionosctl/config.yaml")
      --content-type string   MIME type stored with the object and returned as its Content-Type on download (e.g. image/jpeg). Auto-detected from the --source file extension when omitted, defaulting to application/octet-stream if unknown
  -D, --depth int             Level of detail for response objects (default 1)
  -F, --filters strings       Limit results to results containing the specified filter:KEY1=VALUE1,KEY2=VALUE2
  -f, --force                 Force command to execute without user input
  -h, --help                  Print usage
  -k, --key string            Key to store the object under, i.e. its full name in the bucket. Use "/" to build a pseudo-folder path (e.g. photos/image.jpg). An existing key is overwritten (creating a new version on versioned buckets) (required)
      --limit int             Maximum number of items to return per request (default 50)
  -l, --location string       Location of the resource to operate on. When unset, list commands query all locations. Can be one of: eu-central-3, eu-central-4, us-central-1. A facility inside one of these metro regions (e.g. de/fra/1) is also accepted and served by its metro region's endpoint. Defaults to eu-central-3
  -n, --name string           Name of the destination bucket to upload into (required)
      --no-headers            Don't print table headers when table output is used
      --offset int            Number of items to skip before starting to collect the results
      --order-by string       Property to order the results by
  -o, --output string         Desired output format [text|json|api-json] (default "text")
      --query string          JMESPath query string to filter the output
  -q, --quiet                 Quiet output
  -s, --source string         Path to the local file whose bytes are uploaded as the object body (required)
  -t, --timeout int           Timeout in seconds for --wait and other wait operations (default 600)
  -v, --verbose count         Increase verbosity level [-v, -vv, -vvv]
  -w, --wait                  Wait for the resource to reach AVAILABLE state after the command completes. No-op for list commands
```

## Examples

```
# Upload a file, letting the content-type be auto-detected from the extension
ionosctl object-storage object put --name my-bucket --key photos/image.jpg --source ./image.jpg

# Upload under a different key and set an explicit content-type
ionosctl object-storage object put --name my-bucket --key exports/report.json --source ./out.dat --content-type application/json
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.ionos.com/cloud/tools-cli/subcommands/object-storage/object/put.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
