Методы
Bucket
Поддерживаемые методы
Метод | Описание |
---|---|
GET Service | Получение списка бакетов |
GET Bucket (List Objects) | Получение списка объектов в бакете |
GET Bucket Location | Получение региона бакета |
DELETE Bucket | Удаление бакета |
HEAD Bucket | Получение статуса бакета |
PUT Bucket | Создание бакета |
GET Service
Описание
Получение списка бакетов. Подробное описание метода.
Пример запроса
GET /
Доступ
Пользователь получает листинг только тех бакетов, к которым он имеет права на чтение или запись.
GET Bucket (List Objects)
Описание
Получение списка объектов в бакете.
Вторая версия обратно-совместима с первой и добавляет поддержку параметров list-type, continuation-token, fetch-owner, start-after. Подробное описание метода.
Пример запроса
GET /<bucketName>
Поддерживаемые параметры
delimiter, marker, max-keys, prefix
Неподдерживаемые параметры
encoding-type
Доступ
Пользователь может получить листинг объектов только того бакета, к которому он имеет право на чтение или запись.
GET Bucket Location
Описание
Получение региона бакета. Подробное описание метода.
Пример запроса
GET /<bucketName>?location
Доступ
Пользователь может получить регион только того бакета, к которому он имеет право на чтение или запись.
DELETE Bucket
Описание
Удаление бакета. Подробное описание метода.
Пример запроса
DELETE /<bucketName>
Доступ
Пользователь может удалить бакет, если он имеет право на запись в этот бакет.
HEAD Bucket
Описание
Заголовок бакета. Подробное описание метода.
Пример запроса
HEAD /<bucketName>
Доступ
Пользователь может получить статус бакета, если он имеет право на чтение или запись в него.
PUT Bucket
Описание
Создание бакета. Подробное описание метода.
Примечание: создание бакета с холодным классом хранения не поддерживается на уровне S3 API.
Пример запроса
PUT /<bucketName>
Неподдерживаемые заголовки
Все ACL.
Доступ
Пользователь может создать бакет, если он имеет право на запись в бакет (не имеет, поэтому и не может создать).
Object
Поддерживаемые методы | Описание метода |
---|---|
GET Object | Получение объекта |
HEAD Object | Получение метаданных объекта |
PUT Object | Создание объекта |
PUT Object — Copy | Копирование объекта |
DELETE Object | Удаление объекта |
GET Object
Описание
Получение объекта. Если объект multipart, то он отдаётся, как цельный объект. Подробное описание метода.
Пример запроса
GET /<bucketName>/<objectName>
Поддерживаемые заголовки
Range
Неподдерживаемые заголовки
Все заголовки с префиксом “If-”, “x-amz-server-side-encryption-”
Поддерживаемые параметры
Все параметры с префиксом “response-”
Неподдерживаемые параметры
partNumber, versionId
Доступ
Пользователь может получить объект, если он имеет право на чтение или запись в бакет.
HEAD Object
Описание
Получение метаданных объекта. Подробное описание метода.
Пример запроса
HEAD /<bucketName>/<objectName>
Неподдерживаемые заголовки
Все с префиксом “If-”, “x-amz-server-side-encryption-”
Неподдерживаемые параметры
partNumber, versionId
Доступ
Пользователь может получить метаданные объекта, если он имеет право на чтение или запись в бакет.
PUT Object
Описание
Создание объекта. Подробное описание метода.
Пример запроса
PUT /<bucketName>/<objectName>
Поддерживаемые заголовки
Cache-Control, Content-Disposition, Content-Encoding, Content-Language, Content-Type, Expires, “x-amz-meta-”
Неподдерживаемые заголовки
Content-MD5, x-amz-storage-class, x-amz-tagging, x-amz-website-redirect-location, префикс “x-amz-object-lock-”, ACL, префикс “x-amz-server-side-encryption-”
Доступ
Пользователь может создать объект, если он имеет право на запись в бакет.
PUT Object — Copy
Описание
Копирование объекта. При копировании объекта самого в себя выполняется модификация метаданных объекта. Подробное описание метода.
Пример запроса
PUT /<bucketName>/<objectName> (x-amz-copy-source)
Поддерживаемые заголовки
Cache-Control, Content-Disposition, Content-Encoding, Content-Language, Content-Type, Expires, “x-amz-meta-”, x-amz-copy-source, x-amz-metadata-directive
Неподдерживаемые заголовки
префикс “x-amz-copy-source-if-”, ACL, x-amz-storage-class, x-amz-tagging-directive, x-amz-website-redirect-location, префикс “x-amz-server-side-encryption-”
Доступ
Пользователь может скопировать объект, если он имеет право на чтение или запись в бакет-источник.
DELETE Object
Описание
Удаление объекта.
Если объект multipart, то помимо манифеста удаляются все его части из контейнера с сегментами.
Примечание: данный метод не возвращает ошибок.
Пример запроса
DELETE /<bucketName>/<objectName>
Неподдерживаемые заголовки
x-amz-mfa
Неподдерживаемые параметры
versionId
Доступ
Пользователь может удалить объект, если он имеет право на запись в бакет.
Multipart Upload
Составная загрузка позволяет загружать отдельный объект по частям. Загрузку частей можно производить независимо от остальных, что позволяет дозагружать части в случае, если передача была прервана.
Примечание: при работе с S3 при Multipart-загрузке больших объектов все загруженные сегменты не собираются в финале в единый объект, а складируются в соседний контейнер с таким же именем и суффиксом _s3multipartuploads
.
В общем виде, если размер вашего объекта больше 100 МБ — необходимо использовать составную загрузку.
Загрузка выполняется в три этапа:
Инициализация
Происходит проверка на наличие объекта с таким же именем. Если объект уже существует, то он удаляется.
Создается контейнер с именем текущего, к нему добавляется суффикс _s3multipartuploads
. Далее там будут храниться сегменты загруженного объекта.
Генерируется uploadId.
В контейнере с сегментами создаётся мета-объект /uploads/<bucketName>_s3multipartuploads/<objectName>_<uploadId>/
, который будет хранить Content-Type и все пользовательские метаданные до финализации.
Загрузка частей (сегментов)
Происходит загрузка сегментов.
Финализация
Делается листинг всех объектов по префиксу <bucketName>_s3multipartuploads/<objectName>/<uploadId>/
и сравнивается с листингом, который пришел от клиента.
Считается суммарный размер объекта и суммируются хэши.
Создаётся манифест, который будет находиться по пути загружаемого multipart-объекта.
Из созданного ранее мета-объекта считывается Content-Type и пользовательские метаданные и записываются в манифест, а сам мета-объект затем удаляется.
Поддерживаемы методы
Метод | Описание |
---|---|
Initiate Multipart Upload | Инициирование загрузки multipart-объекта |
Complete Multipart Upload | Финализация загрузки multipart-объекта |
Abort Multipart Upload | Отмена загрузки multipart-объекта |
List Multipart Uploads | Получение списка загружаемых multipart-объектов |
Delete Multiple Objects | Множественное удаление объектов в бакете |
List Parts | Получение списка сегментов multipart-объекта |
Upload Part | Загрузка части multipart-объекта |
Upload Part — Copy | Копирование части multipart-объекта |
Initiate Multipart Upload
Описание
Инициирование загрузки multipart-объекта.
При инициировании multipart upload поверх существующего объекта — он удаляется. Также создается контейнер для сегментов, если отсутствует, и в него по определённому префиксу кладётся meta-объект с метаданными.
Пример запроса
POST /<bucketName>/<objectName>?uploads
Поддерживаемые параметры
Cache-Control, Content-Disposition, Content-Encoding, Content-Language, Content-Type, Expires, “x-amz-meta-”
Неподдерживаемые параметры
x-amz-storage-class, x-amz-tagging, x-amz-website-redirect-location, ACL, префикс “x-amz-server-side-encryption-”
Доступ
Пользователь может инициировать multipart upload, если он имеет право на запись в бакет.
Complete Multipart Upload
Описание
Финализация загрузки multipart-объекта.
По префиксу с переданным uploadId делается листинг объектов и сравнивается с листингом объектов в теле запроса. Из meta-объекта забираются сохранённые метаданные, а сам объект уничтожается.
Пример запроса
POST /<bucketName>/<objectName>?uploadId=<uploadId>
Доступ
Пользователь может финализировать multipart upload, если он имеет право на запись в бакет.
Abort Multipart Upload
Описание
Отмена загрузки multipart-объекта.
Удаляется каждый загруженный сегмент, затем и мета-объект.
Пример запроса
DELETE /<bucketName>/<objectName>?uploadId=<uploadId>
Доступ
Пользователь может отменить загрузку multipart-объекта., если он имеет право на запись в бакет.
List Multipart Uploads
Описание
Получение списка загружаемых multipart-объектов.
Работает только между этапами Инициализации и Финализации.
Пример запроса
GET /<bucketName>?uploads
Поддерживаемые параметры
delimiter (только “/”), max-uploads, key-marker, prefix, upload-id-marker
Неподдерживаемые параметры
encoding-type
Доступ
Пользователь может получить листинг загружаемых multipart-объектов только того бакета, к которому он имеет право на чтение или запись.
Delete Multiple Objects
Описание
Множественное удаление объектов в бакете.
Пример запроса
POST /<bucketName>?delete
Неподдерживаемые параметры
VersionId
Поддерживаемые заголовки
Content-MD5
Неподдерживаемые заголовки
x-amz-mfa
Доступ
Пользователь может удалить объект, если он имеет право на запись в бакет.
List Parts
Описание
Получение списка сегментов multipart-объекта.
Работает только между этапами Инициализации и Финализации.
Пример запроса
GET /<bucketName>/<objectName>?uploadId=<uploadId>
Поддерживаемые параметры
uploadId, max-parts, part-number-marker
Неподдерживаемые параметры
encoding-type
Доступ
Пользователь может получить список сегментов, если он имеет право на чтение или запись в бакет.
Upload Part
Описание
Загрузка части multipart-объекта.
В этом методе к имени бакета добавляется "_s3multipartuploads"
, а путь к объекту заменяется на "<objectName>/<uploadId>/<partNumber>"
.
Пример запроса
PUT /<bucketName>/<objectName>?partNumber=<partNumber>&uploadId=<uploadId>
Неподдерживаемые параметры
Expect, Content-MD5, префикс “x-amz-server-side-encryption-”
Доступ
Пользователь может создать часть multipart-объекта, если он имеет право на запись в бакет.
Upload Part - Copy
Описание
Копирование части multipart-объекта.
Пример запроса
PUT /<bucketName>/<objectName>?partNumber=<part_number>&uploadId=<uploadId> (x-amz-copy-source)
Поддерживаемые параметры
x-amz-copy-source
Неподдерживаемые параметры
x-amz-copy-source-range, префикс “x-amz-copy-source-if-”, “x-amz-server-side-encryption-”
Доступ
Пользователь может скопировать часть multipart-объекта, если он имеет право на чтение или запись в бакет-источник.