存在使用xquery存储文件

时间:2019-01-09 08:05:01

标签: xquery exist-db

直接在eXide(Eval)中运行以下xquery效果很好,将MyFS目录中的XML文件添加到MyCollectionPath中:

xquery version "3.1";

let $selected_directory:= 'MyFSdirectory'
let $source-directory := $selected_directory
let $target-collection := 'MyCollectionPath'
return

    xmldb:store-files-from-pattern($target-collection, $source-directory, '*.xml')

但是,当我将其添加到函数中并从我的应用中调用它时,store-files-from-pattern无法完成工作(未显示错误,但文件未上传),检查点打印在我的屏幕,因此该函数被正确调用。有提示吗?

    declare function app:upload_file($node as node(), $model as map(*)) {
    let $selected_directory:= "MyFSdirectory"
    let $source-directory := $selected_directory
    let $target-collection := "MyCollectionPath"
    return 
        <p>check point</p> |
        xmldb:store-files-from-pattern($target-collection, $source-directory, '*.xml') 
};

1 个答案:

答案 0 :(得分:2)

这听起来像是权限问题。换句话说,当您在eXide中运行脚本时,您可能以对目标集合具有写权限的用户(例如“ admin”)身份运行,但是在您的应用程序中,该脚本很可能以来宾用户身份运行,而没有必须具有写入目标集合的权限。

要进行故障排除,请在您的app:upload_file()函数中添加一个调用xmldb:login()的表达式,为您在eXide中使用的用户提供凭据。

如果以此方式提升特权有效,那么下一步将是考虑在目标集合上设置适当的权限,或者考虑在写入数据库的模块上应用setuid or setgid