将文件上传到运行在 Docker 容器上的 eXist-db

我在 docker 容器上使用exist-db。在 Ubuntu 上安装 Java 并安装 eXist 安装无头 jar,同时添加数据卷(Azure 文件),用于存储所有物理文件和 db 数据文件。

在生成新文件并将其保存到卷驱动器后,我需要将文件自动上传到存在数据库(使用 C#)。

根据 eXist documentation 有几种上传方法,但没有一种对我有效。

  1. 仪表板或 eXide - 不相关 - 它应该是 GUI 应用程序。
  2. Java Admin Client - 因为没有 GUI 而无法工作 -> 我遇到了这个失败:'没有设置 X11 DISPLAY 变量,但是这个程序执行了一个需要它的操作......'
  3. 通过 Web 客户端(使用浏览器或通过代码)通过 REST 或 WebdaV,我可以运行 xQuery 进行查询,但用于存储新文件?怎么样?

所以,我找到的解决方案是使用 xmldb:store 函数编写 xQuery 文件。

设置新文件名和位置(在卷中)并通过 WebdaV 或 REST 运行。

但我觉得有一个更简单的解决方案...

有人可以帮忙吗?

顺便说一句,这是 xmldb:store Xquery 文件:

xquery version "3.1";

declare namespace rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
import module namespace xmldb="http://exist-db.org/xquery/xmldb";

declare function local:upload() {

    let $filename := request:get-uploaded-file-name('file')

    let $log-in := xmldb:login("/db","Admin","admin")
    let $file := 'file:////usr/new_file_location.xml'
    let $record := doc($file)
    let $store := xmldb:store("/db/akn","new_file_name.xml",$record )

    return
<results>
   <message>File {$file} has been stored.</message>
</results>

};

local:upload()
a123123aaaaa 回答:将文件上传到运行在 Docker 容器上的 eXist-db

当按照 eXist Docker documentation 中的描述启动 eXist 时 - 它侦听端口 8080 - 您可以访问所有 eXist 的标准端点:

  • 用于 WebDAV 的 http://localhost:8080/exist/webdav/db
  • 用于 REST 的 http://localhost:8080/exist/rest/db
  • 用于 XML-RPC 的 http://localhost:8080/exist/xmlrpc/db
  • http://localhost:8080/exist/apps 用于安装在 /db/apps 中的应用。

当然,如果您已将 Docker 的 eXist 配置为侦听不同的端口,只需切换端口即可。

因此,要以编程方式将文件上传到 Dockerized eXist,您引用的文档文章 Uploading files 中概述的方法应该都可以工作:WebDAV、client.sh、Ant 甚至 curl。对于 WebDAV,如果您还没有配置用户和密码,您只需使用 URL http://localhost:8080/exist/webdav/db、用户名“admin”和空白密码进行连接。对于 Ant,请参阅 Ant tasks 文档。对于 curl,您将对 REST 接口执行 HTTP PUT 请求:

curl -s -f -H 'Content-Type: application/xml' \
     -T <filename> \
     --user <user>:<password> \
     "http://localhost:8080/exist/rest/db/apps/<collection>/<filename>"
本文链接:https://www.f2er.com/29745.html

大家都在问