Spec-Zone.ru › CouchDB 3.5

/{db}/{docid}/{attname}

HEAD /{db}/{docid}/{attname}

Возвращает HTTP-заголовки, содержащие минимальный объем информации об указанном вложении. Метод поддерживает те же аргументы запроса, что и метод GET /{db}/{docid}/{attname}, но возвращает только информацию из заголовков (включая размер вложения, кодировку и хеш MD5 в качестве ETag).

Параметры:
  • db – Имя базы данных

  • docid – Идентификатор документа

  • attname – Имя вложения

Заголовки запроса:
  • If-Match – Ревизия документа. Альтернатива параметру запроса rev

  • If-None-Match – Двоичный дайджест MD5 вложения в кодировке base64. Необязательный

Параметры запроса:
  • rev (string) – Ревизия документа. Необязательный

Заголовки ответа:
  • Accept-Ranges – Поддержка запросов с указанием диапазона. Используется для вложений с типом содержимого application/octet-stream

  • Content-Encoding – Используемый алгоритм сжатия. Доступен, если content_type вложения входит в list of compressible types

  • Content-Length – Размер вложения. Если использовался алгоритм сжатия, это значение относится к сжатому, а не к фактическому размеру

  • ETag – Двоичный дайджест MD5 в кодировке base64, заключенный в двойные кавычки

Коды состояния:
  • 200 OK – Вложение существует

  • 401 Unauthorized – Требуются права на чтение

  • 403 Forbidden – Недостаточно разрешений / Слишком много запросов с недействительными учетными данными

  • 404 Not Found – Указанная база данных, документ или вложение не найдены

Запрос:

HEAD /recipes/SpaghettiWithMeatballs/recipe.txt HTTP/1.1
Host: localhost:5984

Ответ:

HTTP/1.1 200 OK
Accept-Ranges: none
Cache-Control: must-revalidate
Content-Encoding: gzip
Content-Length: 100
Content-Type: text/plain
Date: Thu, 15 Aug 2013 12:42:42 GMT
ETag: "vVa/YgiE1+Gh0WfoFJAcSg=="
Server: CouchDB (Erlang/OTP)
GET /{db}/{docid}/{attname}

Возвращает файловое вложение, связанное с документом. Возвращаются исходные данные связанного вложения (как при обращении к статическому файлу). Возвращаемый Content-Type будет совпадать с типом содержимого, заданным при добавлении вложения документа в базу данных.

Параметры:
  • db – Имя базы данных

  • docid – Идентификатор документа

  • attname – Имя вложения

Заголовки запроса:
  • If-Match – Ревизия документа. Альтернатива параметру запроса rev

  • If-None-Match – Двоичный дайджест MD5 вложения в кодировке base64. Необязательный

Параметры запроса:
  • rev (string) – Ревизия документа. Необязательный

Заголовки ответа:
  • Accept-Ranges – Поддержка запросов с указанием диапазона. Используется для вложений с типом содержимого application/octet-stream

  • Content-Encoding – Используемый алгоритм сжатия. Доступен, если content_type вложения входит в list of compressible types

  • Content-Length – Размер вложения. Если используется алгоритм сжатия, это значение относится к сжатому, а не к фактическому размеру

  • ETag – Двоичный дайджест MD5 в кодировке base64, заключенный в двойные кавычки

Ответ:

Сохраненное содержимое

Коды состояния:
  • 200 OK – Вложение существует

  • 401 Unauthorized – Требуются права на чтение

  • 403 Forbidden – Недостаточно разрешений / Слишком много запросов с недействительными учетными данными

  • 404 Not Found – Указанная база данных, документ или вложение не найдены

PUT /{db}/{docid}/{attname}

Загружает предоставленное содержимое в качестве вложения к указанному документу. Имя вложения должно быть строкой, закодированной для URL. Необходимо указать заголовок Content-Type, а для существующего документа также нужно передать аргумент запроса rev или HTTP-заголовок If-Match. Если ревизия не указана, будет создан новый, в остальном пустой документ с указанным вложением либо возникнет конфликт.

Если при загрузке вложения используется имя уже существующего вложения, CouchDB обновит соответствующее сохраненное содержимое в базе данных. Поскольку для добавления вложения к документу необходимо указать сведения о ревизии, это служит проверкой при обновлении существующего вложения.

Примечание

Загрузка вложения обновляет соответствующую ревизию документа. Ревизии отслеживаются для родительского документа, а не для отдельных вложений.

Параметры:
  • db – Имя базы данных

  • docid – Идентификатор документа

  • attname – Имя вложения

Заголовки запроса:
  • Content-Type – MIME-тип вложения. По умолчанию: application/octet-stream Необязательный

  • If-Match – Ревизия документа. Альтернатива параметру запроса rev

Параметры запроса:
  • rev (string) – Ревизия документа. Необязательный

Объект JSON ответа:
  • id (string) – Идентификатор документа

  • ok (boolean) – Статус операции

  • rev (string) – Токен ревизии MVCC

Коды состояния:
  • 201 Created – Вложение создано и сохранено на диске

  • 202 Accepted – Запрос принят, но изменения еще не сохранены на диске

  • 400 Bad Request – Недопустимое тело запроса или параметры

  • 401 Unauthorized – Требуются права на запись

  • 403 Forbidden – Недостаточно разрешений / Слишком много запросов с недействительными учетными данными

  • 404 Not Found – Указанная база данных, документ или вложение не найдены

  • 409 Conflict – Ревизия документа не указана или не является последней

Запрос:

PUT /recipes/SpaghettiWithMeatballs/recipe.txt HTTP/1.1
Accept: application/json
Content-Length: 86
Content-Type: text/plain
Host: localhost:5984
If-Match: 1-917fa2381192822767f010b95b45325b

1. Cook spaghetti
2. Cook meatballs
3. Mix them
4. Add tomato sauce
5. ...
6. PROFIT!

Ответ:

HTTP/1.1 201 Created
Cache-Control: must-revalidate
Content-Length: 85
Content-Type: application/json
Date: Thu, 15 Aug 2013 12:38:04 GMT
ETag: "2-ce91aed0129be8f9b0f650a2edcfd0a4"
Location: http://localhost:5984/recipes/SpaghettiWithMeatballs/recipe.txt
Server: CouchDB (Erlang/OTP)

{
    "id": "SpaghettiWithMeatballs",
    "ok": true,
    "rev": "2-ce91aed0129be8f9b0f650a2edcfd0a4"
}
DELETE /{db}/{docid}/{attname}

Удаляет вложение с именем файла {attname} из указанного doc. Чтобы удалить вложение, необходимо передать параметр запроса rev или заголовок If-Match с текущей ревизией.

Примечание

Удаление вложения обновляет соответствующую ревизию документа. Ревизии отслеживаются для родительского документа, а не для отдельных вложений.

Параметры:
  • db – Имя базы данных

  • docid – Идентификатор документа

Заголовки запроса:
  • Accept –

    • application/json

    • text/plain

  • If-Match – Ревизия документа. Альтернатива параметру запроса rev

Параметры запроса:
  • rev (string) – Ревизия документа. Обязательный

  • batch (string) – Сохранить изменения в пакетном режиме. Возможные значения: ok. Необязательный

Заголовки ответа:
  • Content-Type –

    • application/json

    • text/plain; charset=utf-8

  • ETag – Новая ревизия документа в двойных кавычках

Объект JSON ответа:
  • id (string) – Идентификатор документа

  • ok (boolean) – Статус операции

  • rev (string) – Токен ревизии MVCC

Коды состояния:
  • 200 OK – Вложение успешно удалено

  • 202 Accepted – Запрос принят, но изменения еще не сохранены на диске

  • 400 Bad Request – Недопустимое тело запроса или параметры

  • 401 Unauthorized – Требуются права на запись

  • 403 Forbidden – Недостаточно разрешений / Слишком много запросов с недействительными учетными данными

  • 404 Not Found – Указанная база данных, документ или вложение не найдены

  • 409 Conflict – Ревизия документа не указана или не является последней

Запрос:

DELETE /recipes/SpaghettiWithMeatballs?rev=6-440b2dd39c20413045748b42c6aba6e2 HTTP/1.1
Accept: application/json
Host: localhost:5984

Вместо параметра запроса rev можно также использовать заголовок If-Match:

DELETE /recipes/SpaghettiWithMeatballs HTTP/1.1
Accept: application/json
If-Match: 6-440b2dd39c20413045748b42c6aba6e2
Host: localhost:5984

Ответ:

HTTP/1.1 200 OK
Cache-Control: must-revalidate
Content-Length: 85
Content-Type: application/json
Date: Wed, 14 Aug 2013 12:23:13 GMT
ETag: "7-05185cf5fcdf4b6da360af939431d466"
Server: CouchDB (Erlang/OTP)

{
    "id": "SpaghettiWithMeatballs",
    "ok": true,
    "rev": "7-05185cf5fcdf4b6da360af939431d466"
}

Запросы HTTP с указанием диапазона

HTTP позволяет указывать диапазоны байтов в запросах. Это дает возможность реализовать возобновляемую загрузку, а также перемотку в аудио- и видеопотоках. Эта возможность доступна для всех вложений в CouchDB.

Кратко рассмотрим, как это работает внутри. Обычно из CouchDB нужно отдавать большие двоичные файлы, например MP3-файлы и видео, но для наглядности здесь используется текстовый файл (обратите внимание, что вместо text/plain я использую :header`Content-Type` application/octet-stream).

shell> cat file.txt
My hovercraft is full of eels!

Теперь сохраним этот текстовый файл в CouchDB как вложение. Сначала создадим базу данных:

shell> curl -X PUT http://adm:pass@127.0.0.1:5984/test
{"ok":true}

Затем за один шаг создадим новый документ и файловое вложение:

shell> curl -X PUT http://adm:pass@127.0.0.1:5984/test/doc/file.txt \
            -H "Content-Type: application/octet-stream" -d@file.txt
{"ok":true,"id":"doc","rev":"1-287a28fa680ae0c7fb4729bf0c6e0cf2"}

Теперь можно легко запросить весь файл:

shell> curl -X GET http://adm:pass@127.0.0.1:5984/test/doc/file.txt
My hovercraft is full of eels!

Но предположим, что нам нужны только первые 13 байт:

shell> curl -X GET http://adm:pass@127.0.0.1:5984/test/doc/file.txt \
            -H "Range: bytes=0-12"
My hovercraft

HTTP поддерживает множество способов указания одного или даже нескольких диапазонов байтов. Подробнее об этом читайте в RFC 2616, раздел 14.27.

Примечание

Базы данных, созданные в CouchDB 1.0.2 или более ранней версии, будут поддерживать запросы с указанием диапазона в версии 3.5, но в них используется менее эффективный алгоритм. Если вы планируете активно использовать эту возможность, выполните уплотнение базы данных с помощью CouchDB 3.5, чтобы воспользоваться более эффективным алгоритмом поиска диапазонов байтов.

Copyright © 2025 The Apache Software Foundation — Licensed under the Apache License 2.0
https://docs.couchdb.org/en/3.5.1/api/document/attachments.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API