NextCloud 通过 WebDAV 脚本标记文件

NextCloud file tagging through WebDAV script

我正在使用 NextCloud 11 存储我的个人文件,我使用文档中的简单 curl 脚本将文件上传到我的 NextCloud 驱动器:

curl -u user:pw -T test.pdf "http://localhost/nextcloud/remote.php/dav/files/user/test/test.pdf"

另外,我想直接给上传的文件加上一些标签。然而,在官方文档中,它们只是展示了如何通过 WebDAV 接口上传、删除和移动文件。

有人能告诉我如何远程标记文件吗?

我已经 post 在 NextCloud 官方社区论坛中提出了同样的问题,但我还没有收到回复。如果我收到回复,我会 post 在这里。

POST https://yournextcloud.com/index.php/api/v1/files/path/to/file

有效载荷是JSON:

{"tags": ["tag1", "tag2"]}

您需要使用基本身份验证来验证自己

编辑:API 只能从 Nextcloud 内部调用,因为需要 CSRF 令牌。

郑重声明,经过一番挖掘,我发现 https://doc.owncloud.com/server/latest/developer_manual/webdav_api/tags.html 也可以为 nextcloud 完成工作。简而言之:

获取给定文件的文件 ID:

curl --silent -u user:password -X PROPFIND -H "Content-Type: text/xml" \
  --data-binary "@file-propfind.xml" https://nextcloud/remote.php/webdav/file' | xmllint --format -

在您的目录中有一个 file-propfind.xml,其中包含类似

的内容
<?xml version="1.0" encoding="utf-8" ?>
<a:propfind xmlns:a="DAV:" xmlns:oc="http://owncloud.org/ns">
  <a:prop>
    <oc:fileid/>
  </a:prop>
</a:propfind>

然后使用

获取此文件的标签列表
curl --silent -u user:password -X PROPFIND -H "Content-Type: text/xml" \
  --data-binary "@tags-propfind.xml" https://nextcloud/remote.php/dav/systemtags-relations/files/<FILEID>" | xmllint --format -

其中 FILEID 是您在之前的响应中作为 oc:fileid 获得的编号,tags-propfind.xml 是包含类似

内容的文件
<?xml version="1.0" encoding="utf-8" ?>
<a:propfind xmlns:a="DAV:" xmlns:oc="http://owncloud.org/ns">
  <a:prop>
    <oc:display-name/>
    <oc:user-visible/>
    <oc:user-assignable/>
    <oc:id/>
  </a:prop>
</a:propfind>

这是为了阅读标签,但 API 文档也解释了如何以相同的方式添加标签。