Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用MarkLogic REST API以二进制形式加载文本文件_Marklogic - Fatal编程技术网

使用MarkLogic REST API以二进制形式加载文本文件

使用MarkLogic REST API以二进制形式加载文本文件,marklogic,Marklogic,是否可以通过MarkLogic REST API将文本文件(无论其内容如何)作为二进制文档加载?更具体地说,通过资源扩展端点 我认为可以通过xdmp:documentload函数实现,但不太确定如何使用restapi实现 xdmp:document-load("C:\my\path\test.txt", map:map() => map:with("uri", "/test/test.txt") => map:with("format", "bin

是否可以通过MarkLogic REST API将文本文件(无论其内容如何)作为二进制文档加载?更具体地说,通过资源扩展端点

我认为可以通过xdmp:documentload函数实现,但不太确定如何使用restapi实现

xdmp:document-load("C:\my\path\test.txt",
    map:map() => map:with("uri", "/test/test.txt")
              => map:with("format", "binary")
)
我尝试通过PUT/v1/documents API加载同一个文档,并将format参数设置为binary。但它仍然作为文本文件加载

这个用例是我需要接收一堆附件文件,其中偶尔包括一些文本文件。我不需要MarkLogic为它们的内容编制索引,事实上,如果MarkLogic尝试这样做,这些文件中的许多文件都有编码或格式问题


谢谢大家!

对于/v1/documents PUT,format参数用于指示元数据的格式,而不是文档的格式

如中所述

主:URI扩展MIME类型映射,只要请求未指定转换函数。 回退:内容类型头MIME类型映射。对于多部分输入,请求内容类型标头必须是multipart/mixed,因此每个部分的内容类型标头指定该部分内容的MIME类型。 文档URI中的资源文件扩展名用于查找已配置的Mimetype。如果有匹配的条目,它将使用配置的Mimetype的格式

不幸的是,显式内容类型标头不会覆盖隐式格式确定。所以,如果您想将具有.txt文件扩展名的文档作为二进制文档加载,则需要实现一些变通方法

为了使用/v1/documents PUT以二进制形式加载文本文档,您可以:

使用不同的文件扩展名。将.bin追加到文本文件URI的末尾,即/myTextFile.txt.bin。这可能不是我们想要的,因为它确实改变了文档的URI,但确实表明文本文档被存储为二进制文档。 加载文档时应用自定义转换并指定所需的 内容类型 可应用的直通转换示例,以便不应用隐式URL格式检测,而应用显式内容类型标头:

function noop(context, params, content){
  return content;
} 
exports.transform=noop
在名称为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并将内容类型指定为二进制Mimetype,即应用程序八位字节流:

它将以二进制而不是文本的形式加载


收益率:二进制

如果放入/v1/documents,format参数用于指示元数据的格式,而不是文档的格式

如中所述

主:URI扩展MIME类型映射,只要请求未指定转换函数。 回退:内容类型头MIME类型映射。对于多部分输入,请求内容类型标头必须是multipart/mixed,因此每个部分的内容类型标头指定该部分内容的MIME类型。 文档URI中的资源文件扩展名用于查找已配置的Mimetype。如果有匹配的条目,它将使用配置的Mimetype的格式

不幸的是,显式内容类型标头不会覆盖隐式格式确定。所以,如果您想将具有.txt文件扩展名的文档作为二进制文档加载,则需要实现一些变通方法

为了使用/v1/documents PUT以二进制形式加载文本文档,您可以:

使用不同的文件扩展名。将.bin追加到文本文件URI的末尾,即/myTextFile.txt.bin。这可能不是我们想要的,因为它确实改变了文档的URI,但确实表明文本文档被存储为二进制文档。 加载文档时应用自定义转换并指定所需的 内容类型 可应用的直通转换示例,以便不应用隐式URL格式检测,而应用显式内容类型标头:

function noop(context, params, content){
  return content;
} 
exports.transform=noop
在名称为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并将内容类型指定为二进制Mimetype,即应用程序八位字节流:

它将以二进制而不是文本的形式加载


收益率:binary

如果您的文本文件存在编码问题,这通常表示在加载和处理内容的过程中使用了不正确的字符编码。我会专注于找出哪里出了问题,而不是试图通过保存为二进制来避免这个问题
ter编码在加载和处理内容的过程中被使用。我会专注于找出哪里出了问题,而不是试图通过保存为二进制文件来避免这个问题。感谢您的详细解释和解决方案!感谢您的详细解释和解决方案!