如何使用XQuery和HTML上传文件到MarkLogic?

How to use XQuery and HTML to upload files to MarkLogic?

正如我的问题所述,我正在尝试使用 XQuery 和一个简单的 HTML 表单将文件上传到我的 MarkLogic 本地数据库。我已经连接到 HTTP 服务器。

我的代码现在看起来像这样:

表格:

<div id="content">
    <form name="test" action="upload.xqy?uid={xdmp:random()}" method="post"
          enctype="multipart/form-data">
    <p><label>File to upload:
    <input type="file" class="name" name="upload" size="50"/></label></p>
    <p><input type="submit" value="Upload and Get Results"/></p>
    </form>
  </div>

upload.xqy:

 let $filename := xdmp:get-request-field-filename("upload")
 let $collection := "semansysdocs"
 let $fileLocation := xdmp:get-request-path()
 return
xdmp:document-load($fileLocation,
  map:map() => map:with("uri", $filename)
            => map:with("permissions", xdmp:default-permissions())
            => map:with("collections", $collection)
)

文档只是说明要使用 xdmp:document-insert(),但我不明白在哪里。

有没有一种方法可以指定文件的来源以获取 $fileLocation,或者我是否需要其他方法来执行此操作?

谢谢!

您的表单已在发送文件名和文件数据。 xdmp:get-request-field-filename('upload') returns 浏览器发送的原始文件路径,xdmp:get-request-field('upload') 将为您获取数据。我认为您正在寻找类似的东西:

let $filename := xdmp:get-request-field-filename("upload")
let $file := xdmp:get-request-field("upload")
let $collection := "semansysdocs"
return
  xdmp:document-insert(
    $filename,
    $file,
    xdmp:default-permissions(),
    (xdmp:default-collections(), $collection)
  )

HTH!