/{db}/{docid}/{attname}
-
HEAD/{db}/{docid}/{attname} -
Возвращает HTTP-заголовки, содержащие минимальный объем информации об указанном вложении. Метод поддерживает те же аргументы запроса, что и метод
GET /{db}/{docid}/{attname}, но возвращает только информацию из заголовков (включая размер вложения, кодировку и хеш MD5 в качестве ETag).- Параметры:
-
db – Имя базы данных
docid – Идентификатор документа
attname – Имя вложения
- Заголовки запроса:
-
If-Match – Ревизия документа. Альтернатива параметру запроса
revIf-None-Match – Двоичный дайджест MD5 вложения в кодировке base64. Необязательный
- Параметры запроса:
-
rev (string) – Ревизия документа. Необязательный
- Заголовки ответа:
-
Accept-Ranges – Поддержка запросов с указанием диапазона. Используется для вложений с типом содержимого application/octet-stream
Content-Encoding – Используемый алгоритм сжатия. Доступен, если
content_typeвложения входит вlist of compressible typesContent-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 – Ревизия документа. Альтернатива параметру запроса
revIf-None-Match – Двоичный дайджест MD5 вложения в кодировке base64. Необязательный
- Параметры запроса:
-
rev (string) – Ревизия документа. Необязательный
- Заголовки ответа:
-
Accept-Ranges – Поддержка запросов с указанием диапазона. Используется для вложений с типом содержимого application/octet-stream
Content-Encoding – Используемый алгоритм сжатия. Доступен, если
content_typeвложения входит вlist of compressible typesContent-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 – Идентификатор документа
- Заголовки запроса:
- Параметры запроса:
-
rev (string) – Ревизия документа. Обязательный
batch (string) – Сохранить изменения в пакетном режиме. Возможные значения:
ok. Необязательный
- Заголовки ответа:
-
-
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