С / v1 / documents PUT параметр format
используется для указания формата метаданных, а не документа.
Как описано в Управление типом содержимого ввода и вывода
- Первичный: сопоставление типа MIME расширения URI, если в запросе не указано функция преобразования.
- Откат: Отображение типа MIME заголовка типа содержимого. Для многокомпонентного ввода заголовок типа контента запроса должен быть составным / смешанным, поэтому заголовок типа контента для каждой части указывает MIME-тип контента для этой части.
Ресурс Расширение файла из URI документа используется для поиска настроенного Mimetype. Он будет использовать format
для сконфигурированного Mimetype, если есть соответствующая запись.
К сожалению, явный заголовок Content-type
не отменяет неявное определение format
. Таким образом, если вы хотите загрузить документ с расширением .txt
как документы binary()
, вам нужно будет применить некоторые обходные пути.
Чтобы загрузить текстовые документы как binary()
с /v1/documents PUT
вы могли бы:
- Использовать другое расширение файла. Добавьте ".bin" в конец URI текстового файла, т.е.
/myTextFile.txt.bin
. Это может быть нежелательно, поскольку оно действительно изменяет URI документов по сравнению с тем, чем оно является на самом деле, но указывает на то, что текст c сохраняется как двоичный документ. - Применяет пользовательское преобразование, когда загрузите документы и укажите желаемый
Content-type
Пример сквозного преобразования, которое можно применить, чтобы неявное определение URL format
не применялось, и явный заголовок Content-type
применяется:
function noop(context, params, content){
return content;
}
exports.transform=noop
После установки пользовательского преобразования с именем noop
: Ниже приведен пример команды curl, которая устанавливает преобразование n oop. Обновите имя пользователя / пароль соответствующим образом:
curl --anyauth --user myUsername:myPassword -X PUT -i -d "function noop(context, params, content){return content;} exports.transform=noop" -H "Content-type: application/vnd.marklogic-javascript" http://localhost:8000/LATEST/config/transforms/noop
Затем можно вызвать /v1/documents PUT
и указать Content-type
в качестве двоичного Mimetype (в этом примере, как application-octet-stream
):
curl --anyauth --user myUsername:myPassword -T ./test.txt -i -H "Content-type: application/octet-stream" "http://localhost:8000/v1/documents?uri=/test.txt&transform=noop"
и он будет загружен как binary()
вместо text()
doc("/test.txt")/node()/xdmp:node-kind(.)
выход: binary