在exist中使用xquery存储文件

在exist中使用xquery存储文件,xquery,exist-db,Xquery,Exist Db,直接在eXide(Eval)中运行以下xquery工作正常,将MyFSdirectory中的XML文件添加到MyCollectionPath中: xquery version "3.1"; let $selected_directory:= 'MyFSdirectory' let $source-directory := $selected_directory let $target-collection := 'MyCollectionPath' return xmldb:stor

直接在eXide(Eval)中运行以下xquery工作正常,将MyFSdirectory中的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(存储文件)不起作用(不会显示错误,但不会上载文件),检查点会打印在我的屏幕上,因此该函数被正确调用。有什么提示吗

    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') 
};
声明函数app:upload_文件($node as node(),$model as map(*){
让$selected_目录:=“MyFSdirectory”
让$source目录:=$selected\u目录
让$target集合:=“MyCollectionPath”
返回
检查点

| xmldb:存储模式中的文件($target collection,$source directory,'*.xml')) };
这听起来像是权限问题。换句话说,当您在eXide中运行脚本时,您可能是以对目标集合具有写入权限的用户(例如“管理员”)的身份运行,但在您的应用程序中,脚本可能是以来宾用户的身份运行,而没有向目标集合写入所需的权限

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


如果这种方式提升权限,那么下一步将是考虑在目标集合上设置适当的权限,或者设置在写入数据库的模块上。p> 运行eXide脚本与从应用程序调用函数时,您登录的用户身份是什么?后者很可能没有对目标集合的写入权限。要进行故障排除,请尝试在

app:upload\u file()
函数中使用前者的用户调用
xmldb:login()
。如果这种方式提升了特权,那么下一步将是考虑在目标集合上设置适当的权限或应用于写入数据库的模块上的设置。谢谢你的支持,太好了!然后,我会将此信息添加到“答案”中,以便遇到类似问题的其他人可以清楚地看到它被标记为答案。如果你能接受答案,这将更加清晰。