Load Text Files as Binary Using MarkLogic REST APIs
是否可以通过 MarkLogic REST API 将文本文件(无论其内容如何)加载为二进制文档?更具体地说,通过资源扩展端点?
我看到可以通过
1 2 3 4 | xdmp:document-load("C:\\my\\path\\test.txt", map:map() => map:with("uri","/test/test.txt") => map:with("format","binary") ) |
我尝试通过
用例是我需要摄取一堆附件文件,其中偶尔包含一些文本文件。我不需要 MarkLogic 来索引它们的内容,事实上,如果 MarkLogic 尝试这样做,其中许多文件都有编码或格式问题。
谢谢!
对于 /v1/documents PUT,
如控制输入和输出内容类型中所述
- Primary: URI extension MIME type mapping, as long as the request does not specify a transform function.
- Fallback: Content-type header MIME type mapping. For multipart input, the request Content-type header must be multipart/mixed, so the Content-type header for each part specifies the MIME type of the content for that part.
文档 URI 中的资源文件扩展名用于查找配置的 Mimetype。如果有匹配的条目,它将使用
不幸的是,显式
为了将文本文档加载为
-
使用不同的文件扩展名。将".bin"附加到文本文件 URI 的末尾,即
/myTextFile.txt.bin 。这可能不是所希望的,因为它确实改变了文档的 URI,但确实表明文本文档正在存储为二进制文档。 -
加载文档时应用自定义转换并指定所需的
Content-type
可以应用的直通转换示例,因此不应用隐式 URL
1 2 3 4 | function noop(context, params, content){ return content; } exports.transform=noop |
安装名为
下面是一个安装 noop 转换的示例 curl 命令。根据需要更新用户名/密码:
1 | 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 |
然后可以调用
1 | 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" |
它将被加载为
1 | doc("/test.txt")/node()/xdmp:node-kind(.) |
产量: