对于 /v1/documents PUT,format 参数用于指示元数据的格式,而不是文档。
如Controlling Input and Output Content Type中所述
- 主要:URI 扩展 MIME 类型映射,只要请求没有指定转换函数。
- 回退:内容类型标头 MIME 类型映射。对于多部分输入,请求的 Content-type 标头必须是 multipart/mixed,因此每个部分的 Content-type 标头指定该部分内容的 MIME 类型。
文档 URI 中的资源文件扩展名用于查找配置的 Mimetype。如果有匹配的条目,它将使用 format 配置的 Mimetype。
不幸的是,显式 Content-type 标头不会覆盖隐式 format 确定。因此,如果您想将具有.txt 文件扩展名的文档加载为binary() 文档,那么您需要实施一些变通方法。
为了将文本文档加载为binary() 和/v1/documents PUT,您可以:
- 使用不同的文件扩展名。将“.bin”附加到文本文件 URI 的末尾,即
/myTextFile.txt.bin。这可能不是我们所希望的,因为它确实改变了文档的 URI,但确实表明文本文档被存储为二进制文档。
- 在加载文档时应用自定义转换并指定所需的
Content-type
可以应用的直通转换示例,因此不应用隐式 URL format 检测,而应用显式 Content-type 标头:
function noop(context, params, content){
return content;
}
exports.transform=noop
在installing the custom transform 之后,名称为noop:
下面是一个安装 noop 转换的示例 curl 命令。根据需要更新用户名/密码:
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