如何在Marklogic Server中下载文件?

时间:2012-07-19 14:08:26

标签: xquery marklogic

我想写一个xquery下载&将上传的文档保存在Marklogic Server中。我怎么能这样做?

2 个答案:

答案 0 :(得分:3)

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

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

<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模块,如下所示:

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来做到这一点。

还有其他工作可以支持分段上传。

答案 1 :(得分:1)

使用xdmp:add-response-header

 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)
 )