---
title: "Upload an object"
sidebar_label: "Upload an object"
description: "How to upload an object using simple or segmented upload"
sidebar_position: 1
---

import Formbricks from '@theme/MDXComponents/Formbricks'
import ArrowNestedIcon from '@selectel/docux/icons/arrow-nested'

# Upload an object

You can upload objects into a bucket in two ways:

* [Simple upload](#upload) is available via the Control Panel, [API](/api/#data-storage-and-processing) and [tools for working with S3](/s3/tools/). We do not recommend using it for uploading objects larger than 1 GB;
* [segmented upload](#segmented-upload) is available via [Swift API](/api/object-storage-swift/), [S3 API](/api/object-storage-s3/) and some [S3 tools](/s3/tools/). It is recommended for files larger than 1 GB.

You can upload any number of objects to a bucket, unless [bucket limits](/s3/buckets/limits.mdx) are set.

When uploading objects via [S3 API](/api/object-storage-s3/), you can use [conditional requests](/s3/objects/conditional-requests.mdx).

If [Object Lock](/s3/buckets/object-lock.mdx) is used in the bucket and default object locking is enabled, a governance mode lock will be applied to the uploaded objects.

## Simple upload \{#upload}

We do not recommend using Cyrillic characters in object names.

1. In the [control panel](https://my.selectel.ru/storage/), in the top menu, click **Products** and select **S3**.
2. Go to the **Buckets** section.
3. Open the bucket page → **Objects** tab.
4. Click **Upload files**
5. Select the objects to upload.

## Segmented upload \{#segmented-upload}

Segmented upload is the uploading of objects in parts (segments), which is recommended for files larger than 1 GB.

Segmented upload is possible via [Swift API](/api/object-storage-swift/) (SLO/DLO technology), [S3 API](/api/object-storage-s3/) (Multipart Upload technology), and some [tools for working with S3](/s3/tools/). The segmented upload process depends on the API and tool used. Some tools ([Rclone](/s3/tools/rclone.mdx), [Cyberduck](/s3/tools/cyberduck.mdx)) support segmented upload and automatically enable it for objects larger than a certain size. In other cases, it must be initialized manually.

With segmented upload, you can:

* upload large objects in smaller segments;
* increase upload speed using parallel requests;
* in case of connection failures, do not reload the object, but repeat uploading only the necessary segments.

If a segmented upload completes incorrectly, the segments that were uploaded (incomplete multipart uploads) will be queued for deletion in six months. Due to the specifics of [deleting segmented objects](/s3/objects/delete-object.mdx#delete-segmented-object), such segments may not be deleted. Selectel does not guarantee the completion time for deletion or that segments from an incomplete segmented upload will definitely be deleted. Monitoring and deletion of segments are the responsibility of Selectel customers.

### How it works \{#principle-of-operation}

When performing a segmented upload of an object to a primary bucket (`<bucket_name>`), a service bucket is created where object segments will be stored:

* when uploading objects via S3 API, the bucket is created automatically and is called `<bucket_name>_s3multipartuploads`;
* when uploading objects via Swift API, the bucket is created using an API utility or SDK and is called `<bucket_name>_segments` or `<bucket_name>.file-segments`.

Instead of the object, a manifest—a file describing the segments and their paths—is uploaded to the primary bucket (`<bucket_name>`). When downloading the manifest file, the segments are automatically reassembled into the object.

By default, service buckets are not displayed in the Control panel in the list of S3 buckets — you can [enable the display of service buckets](/s3/manage/enable-segmented-buckets-listing.mdx) in the settings.

### Features \{#features}

When uploading objects via API, take into account:

* [S3 limitations](/s3/about/limitations.mdx);
* specifics of [deleting segmented objects](/s3/objects/delete-object.mdx#delete-segmented-object);
* recommendations not to use Cyrillic characters in object names.

If you use [Object Lock](/s3/buckets/object-lock.mdx) and enable, change, or remove an object lock or a default retention period in a bucket, all object segments inherit the object lock settings. If an object is locked, its segments cannot be deleted while the lock is active. Even so, object segments will not display lock information — you [can check for a lock](/s3/objects/manage-object-lock.mdx) only for the object itself.

## Re-uploading an object \{#reupload}

If the name of the uploaded object matches the name of an object already in the bucket, the behavior depends on whether [versioning](/s3/buckets/versioning.mdx) is enabled in the bucket:

* if versioning is enabled:

  * the new object will become the current version of the object and will be assigned a [version ID](/s3/buckets/versioning.mdx#version-id);
  * the previous object version will not be overwritten by the new one, but will be moved to the [object version list](/s3/buckets/versioning.mdx#view-versions-list) with the same name; ;

* if versioning is suspended or disabled, the new object will overwrite the previous one.

## Upload speed \{#upload-speed}

Upload speed for objects to buckets is affected by:

* channel bandwidth;
* connection mode;
* upload manager software used;
* distance between the storage servers and you;
* host load.

## Billing \{#tariffication}

Regardless of the upload method, the [billed items are](/s3/about/payment.mdx#payment-model) storage volume, number of API requests, and outgoing traffic.

* with [standard uploading](#upload), the storage volume of the entire object is billed; ;
* with [segmented upload](#segmented-upload) the object is stored in segments, so only the segments are actually billed. The manifest file takes up a minimal amount of space (a few KB), so the cost of storing an object with segments is almost identical to the cost of storing a whole object.

<Formbricks />
