NextCloud 通过 WebDAV 脚本标记文件

Posted

技术标签:

【中文标题】NextCloud 通过 WebDAV 脚本标记文件【英文标题】:NextCloud file tagging through WebDAV script 【发布时间】:2017-07-21 21:18:12 【问题描述】:

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

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

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

有人提示我如何远程标记文件吗?

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

【问题讨论】:

【参考方案1】:

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

负载是 JSON:

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

您需要使用 Basic Auth 进行身份验证

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

【讨论】:

您好 Bernhard,我刚刚尝试使用此命令 curl -H "Content-Type: application/json" -X POST -d " \"tags\" : [ \"xxx\"] " http://user:pass@localhost/nextcloud/index.php/apps/files/api/v1/user/test/test.pdf 上传文件,但不幸的是没有任何反应。我没有得到任何负面反馈,无论是来自 nextcloud 服务器还是来自 curl 命令。你知道我做错了什么吗?非常感谢。 我尝试了不同的方法curl -H "Content-Type: application/json" -X POST -d " \"tags\" : [ \"xxx\" , \"k\" ] " -u user:pw http://localhost:4080/nextcloud/index.php/apps/files/api/v1/files/user/test。现在我收到错误消息:"message":"CSRF check failed"% 你是对的 github.com/nextcloud/server/blob/master/apps/files/lib/… 没有添加 @NoCSRFRequired 所以它只能从 Web 界面调用。所以这毕竟是不可能的:( 非常感谢您的帮助。我开发了一个简单的 python 标记守护程序,可以在我自己的云服务器上永久运行。实际上,将标签放在数据库中非常简单。 我刚刚提供了小型标记守护进程的代码 - ***.com/a/43081850/5068458【参考方案2】:

为了记录,经过一番挖掘,我找到了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文档也解释了如何以相同的方式添加标签。

【讨论】:

以上是关于NextCloud 通过 WebDAV 脚本标记文件的主要内容,如果未能解决你的问题,请参考以下文章

通过 API 将文件上传到 NextCloud 时出错

OMV技巧之NextCloud

使用 webdav 在节点 js 中迭代 createreadstream 下载空文件

关于owncloud/nextcloud,有几个问题想请教,来个懂的大佬。

基于Linux下搭建NextCloud构建自己的私有网盘

Docker部署NextCloud总结