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了 事件。