之前已经介绍了客户端上传文件的位置,但是后来实践发现只有小文件走owncloud\lib\private\connector\sabre\file.php中的put方法,大文件并没有走,进一步探讨发现对于客户端上传大文件,owncloud会进行拆分上传再整合的方式,为什么这样,我做了个测试:
首先可以确定在大文件上传时,走的方法是:owncloud\lib\private\connector\sabre\file.php中的createFileChunked方法,跟进方法里面进一步找到了下面的方法:
\owncloud\lib\private\filechunking.php中的file_assemble,见文知意,也就是文件整合的方法,然后其中的assemble方法中的$this->remove()注释掉,则会在对应的用户的当前用户名下面的cache文件下发现有一堆拆分的文件,如下图:
可以看到有很多的小文件,而且可以看出拆分的大小为5120kb。那么如何整合这些文件成原文件呢,于是我又测试了一下自己写的整合方法:
首先我将以上文件复制到apache下的think文件夹下,然后运行了一下的php文件:
<?php
echo 222;
$fo=fopen("5.rar","a");
for($i=0;$i<15;$i++){
$content = file_get_contents("think/thinksns.zip-chunking-3572855997-".$i);
$flag=fwrite($fo, $content);
if(!$flag){
break;
echo "挂了!";
}
}
fclose($fo);
echo("SUCCESS!!");
?>
页面输出:222SUCCESS!!
然后再看我的www目录下:
出现了我要生成的5.rar文件,打开发现和原来的压缩文件没有区别,即成功的恢复了这个文件。
这是原文件:
大小和使用都没有问题,OK了