1

我想编写一个 xquery,它将下载并保存在 Marklogic Server 中的上传文档。我怎样才能做到这一点 ?

4

2 回答 2

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 来执行此操作。

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

于 2012-07-19T17:26:12.297 回答
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)
 )
于 2012-07-19T17:24:51.047 回答