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

时间:2018-01-26 08:34:41

标签: html xquery 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,还是需要其他方法来执行此操作?

谢谢!

1 个答案:

答案 0 :(得分:1)

您的表单已经发送了文件名和文件数据。 xdmp:get-request-field-filename('upload')返回浏览器发送的原始文件路径,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!