繁体   English   中英

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

[英]upload file to eXist-db running on Docker container

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

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

根据关于上传文件的 eXist 文档,有几种方法可以将文件上传到 eXist,但它们都不适合我。

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

所以,我找到的解决方案是使用xmldb:store function 编写一个 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 文档中的描述启动 eXist 时——它监听端口 8080——你可以访问所有 eXist 的标准端点:

  • 对于 WebDAV,http://localhost:8080/exist/webdav/db
  • 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 中概述的方法都应该有效:WebDAV、client.sh、Ant 甚至 curl。 对于 WebDAV,如果您还没有配置用户和密码,您只需使用 URL http://localhost:8080/exist/webdav/db、用户名“admin”和空白密码进行连接。 对于 Ant,请参阅Ant 任务文档。 对于 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM