关于 xquery:如何在 Marklogic Server 中下载文档?

How to download documents in Marklogic Server?

我想写一个 xquery 来下载


参见http://developer.marklogic.com/pubs/5.0/apidocs/AppServerBuiltins.html#xdmp:get-request-field,其中有以下示例

考虑一个具有以下内容的 form.xqy XQuery 模块:

1
2
3
4
5
6
7
8
9
10
<html xmlns="http://www.w3.org/1999/xhtml">
  <body>
  <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>
  </body>
</html>

然后有一个upload.xqy XQuery 模块如下:

1
2
3
4
5
6
7
let $filename := xdmp:get-request-field-filename("upload")
let $disposition := fn:concat("attachment; filename=""",$filename,"""")
let $x := xdmp:add-response-header("Content-Disposition", $disposition)
let $x:= xdmp:set-response-content-type(
         xdmp:get-request-field-content-type("upload"))
return
xdmp:get-request-field("upload")

执行form.xqy文件,选择一个文件,点击
"上传并获取结果"按钮。你上传的文件
将根据 mime 类型打开浏览器。如果你
想将其保存到数据库中,您可以使用
xdmp:document-insert 这样做。

还有额外的工作来支持分段上传。


使用 xdmp:add-response-header。

1
2
3
4
5
6
7
 let $uri := xdmp:get-request-field('uri', '')
 let $filename := fn:tokenize($uri,"/")[fn:last()]
 return
 (
     xdmp:add-response-header("Content-Disposition", fn:concat("attachment; filename=", $filename)),
     fn:doc($uri)
 )