将文件上传到 Docker 容器上的 eXist-db 运行
upload file to eXist-db running on Docker container
我在 docker 容器上使用 eXist-db - 在 Ubuntu 上安装 Java,安装 eXist 安装无头 jar,并将数据卷(Azure 文件)添加到存储所有物理文件和数据库数据文件。
在生成新文件并将其保存到卷驱动器(使用 C#)后,我需要自动将文件上传到 eXist-db。
根据eXist documentation on uploading files,有几种方法可以将文件上传到 eXist,但 none 对我有用。
- Dashboard 或 eXide - 不相关,因为它们是 GUI 应用程序。
- Java 管理客户端 - 不工作,因为没有 GUI -> 我遇到了这个失败:'No X11 DISPLAY variable was set, but this program performed an operation which requires it...'
- 通过 Web 客户端(使用浏览器或代码)通过 REST 或 WebDAV,我可以 运行 XQuery 进行查询,但用于存储新文件,如何?
所以,我找到的解决方案是使用 xmldb:store
函数编写一个 XQuery 文件。
此查询使用指定的名称和位置(在卷中)保存了发布的文件,然后可以通过 REST 或 WebDAV 检索存储的文件。
但我觉得必须有一个更简单的解决方案...
有人能帮忙吗?
顺便说一句,这里是 xmldb:store
XQuery:
xquery version "3.1";
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()
当按照 eXist Docker documentation 中的描述启动 eXist 时 - 它侦听端口 8080 - 您可以访问 eXist 的所有标准端点:
- http://localhost:8080/exist/webdav/db 用于 WebDAV
- http://localhost:8080/exist/rest/db REST
- http://localhost:8080/exist/xmlrpc/db 用于 XML-RPC
- http://localhost:8080/exist/apps 适用于安装在 /db/apps.
中的应用
当然,如果您已将 Docker 的 eXist 配置为侦听不同的端口,只需切换端口即可。
因此,要以编程方式将文件上传到 Dockerized eXist,您引用的文档文章 Uploading files, should all work: WebDAV, client.sh, Ant, or even curl. For WebDAV, if you haven't configured users and passwords, you'd just connect with the URL http://localhost:8080/exist/webdav/db, username "admin", and a blank password. For Ant, see the 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>"
这也是可能的:
echo put /home/files/<FILRPATH>/main.xml | /usr/local/eXist-db/
bin/client.sh -s
我在 docker 容器上使用 eXist-db - 在 Ubuntu 上安装 Java,安装 eXist 安装无头 jar,并将数据卷(Azure 文件)添加到存储所有物理文件和数据库数据文件。
在生成新文件并将其保存到卷驱动器(使用 C#)后,我需要自动将文件上传到 eXist-db。
根据eXist documentation on uploading files,有几种方法可以将文件上传到 eXist,但 none 对我有用。
- Dashboard 或 eXide - 不相关,因为它们是 GUI 应用程序。
- Java 管理客户端 - 不工作,因为没有 GUI -> 我遇到了这个失败:'No X11 DISPLAY variable was set, but this program performed an operation which requires it...'
- 通过 Web 客户端(使用浏览器或代码)通过 REST 或 WebDAV,我可以 运行 XQuery 进行查询,但用于存储新文件,如何?
所以,我找到的解决方案是使用 xmldb:store
函数编写一个 XQuery 文件。
此查询使用指定的名称和位置(在卷中)保存了发布的文件,然后可以通过 REST 或 WebDAV 检索存储的文件。
但我觉得必须有一个更简单的解决方案...
有人能帮忙吗?
顺便说一句,这里是 xmldb:store
XQuery:
xquery version "3.1";
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()
当按照 eXist Docker documentation 中的描述启动 eXist 时 - 它侦听端口 8080 - 您可以访问 eXist 的所有标准端点:
- http://localhost:8080/exist/webdav/db 用于 WebDAV
- http://localhost:8080/exist/rest/db REST
- http://localhost:8080/exist/xmlrpc/db 用于 XML-RPC
- http://localhost:8080/exist/apps 适用于安装在 /db/apps. 中的应用
当然,如果您已将 Docker 的 eXist 配置为侦听不同的端口,只需切换端口即可。
因此,要以编程方式将文件上传到 Dockerized eXist,您引用的文档文章 Uploading files, should all work: WebDAV, client.sh, Ant, or even curl. For WebDAV, if you haven't configured users and passwords, you'd just connect with the URL http://localhost:8080/exist/webdav/db, username "admin", and a blank password. For Ant, see the 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>"
这也是可能的:
echo put /home/files/<FILRPATH>/main.xml | /usr/local/eXist-db/
bin/client.sh -s