chunked implementation for readfile
prevents memory issues when downloading large files
This commit is contained in:
parent
0b19af5e10
commit
c8c3b8a63e
|
@ -281,14 +281,6 @@ class OC_Filestorage_Shared extends OC_Filestorage {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function readfile($path) {
|
|
||||||
$source = $this->getSource($path);
|
|
||||||
if ($source) {
|
|
||||||
$storage = OC_Filesystem::getStorage($source);
|
|
||||||
return $storage->readfile($this->getInternalPath($source));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public function filectime($path) {
|
public function filectime($path) {
|
||||||
if ($path == "" || $path == "/") {
|
if ($path == "" || $path == "/") {
|
||||||
$ctime = 0;
|
$ctime = 0;
|
||||||
|
|
|
@ -36,7 +36,6 @@ class OC_Filestorage{
|
||||||
public function is_readable($path){}
|
public function is_readable($path){}
|
||||||
public function is_writable($path){}
|
public function is_writable($path){}
|
||||||
public function file_exists($path){}
|
public function file_exists($path){}
|
||||||
public function readfile($path){}
|
|
||||||
public function filectime($path){}
|
public function filectime($path){}
|
||||||
public function filemtime($path){}
|
public function filemtime($path){}
|
||||||
public function file_get_contents($path){}
|
public function file_get_contents($path){}
|
||||||
|
|
|
@ -52,9 +52,6 @@ class OC_Filestorage_Local extends OC_Filestorage{
|
||||||
public function file_exists($path){
|
public function file_exists($path){
|
||||||
return file_exists($this->datadir.$path);
|
return file_exists($this->datadir.$path);
|
||||||
}
|
}
|
||||||
public function readfile($path){
|
|
||||||
return readfile($this->datadir.$path);
|
|
||||||
}
|
|
||||||
public function filectime($path){
|
public function filectime($path){
|
||||||
return filectime($this->datadir.$path);
|
return filectime($this->datadir.$path);
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,14 +37,6 @@ class OC_Filestorage_Common extends OC_Filestorage {
|
||||||
public function is_readable($path){}
|
public function is_readable($path){}
|
||||||
public function is_writable($path){}
|
public function is_writable($path){}
|
||||||
public function file_exists($path){}
|
public function file_exists($path){}
|
||||||
public function readfile($path) {
|
|
||||||
$handle = $this->fopen($path, "r");
|
|
||||||
$chunk = 1024;
|
|
||||||
while (!feof($handle)) {
|
|
||||||
echo fread($handle, $chunk);
|
|
||||||
}
|
|
||||||
return $this->filesize($path);
|
|
||||||
}
|
|
||||||
public function filectime($path) {
|
public function filectime($path) {
|
||||||
$stat = $this->stat($path);
|
$stat = $this->stat($path);
|
||||||
return $stat['ctime'];
|
return $stat['ctime'];
|
||||||
|
|
|
@ -136,7 +136,14 @@ class OC_FilesystemView {
|
||||||
return $this->basicOperation('filesize',$path);
|
return $this->basicOperation('filesize',$path);
|
||||||
}
|
}
|
||||||
public function readfile($path){
|
public function readfile($path){
|
||||||
return $this->basicOperation('readfile',$path,array('read'));
|
$handle=$this->fopen($path,'r');
|
||||||
|
$chunkSize = 1024*1024;// 1 MB chunks
|
||||||
|
while (!feof($handle)) {
|
||||||
|
echo fread($handle, $chunkSize);
|
||||||
|
@ob_flush();
|
||||||
|
flush();
|
||||||
|
}
|
||||||
|
return $this->filesize($path);
|
||||||
}
|
}
|
||||||
public function is_readable($path){
|
public function is_readable($path){
|
||||||
return $this->basicOperation('is_readable',$path);
|
return $this->basicOperation('is_readable',$path);
|
||||||
|
|
Loading…
Reference in New Issue