这里是文章模块栏目内容页
Nextcloud云盘是如何实现Copy拷贝文件的?

Nextcloud云盘是如何Copy拷贝文件的?

说到复制文件,最简单的流程被官方的文档浓缩成如下的简短描述:

发送一个COPY请求到一个文件或文件夹的路径并设置header请求头参数Destination 的值为

完整目标路径,就能完成文件夹或文件的复制操作。

COPY remote.php/dav/files/user/path/to/file
Destination: https://cloud.example/remote.php/dav/files/user/new/location

是否覆盖目标路径同名文件,是通过设置header请求头参数 Overwrite值为T或F控制启用或禁用。


nextcloud云盘的COPY操作,通过dav实现,remote.php/dav/files/user/path/to/file

是请求的url。被路由到apps/dav应用进行处理。通过sbare库,启动Server->exec();

 $this->invokeMethod($this->httpRequest, $this->httpResponse);

实现一个http请求的处理路由功能; 把不同的请求方法,路由到对应的处理方法;

请求Method 为COPY时,invokeMethod 的方法是httpCopy();

在此方法,通过emit各种事件,把各种插件对复制文件操作需要hook 的动作触发;

在sbare的Coreplugin内实现文件磁盘的真正复制操作;

但是,复制文件后,数据表记录文件关系的各种 操作,是通过插件hook 事件来完成。

所以,每个插件都可以对复制文件这一行为执行自己需要的处理事件,只需要它hook了 事件。