summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArthur Schiwon <blizzz@arthur-schiwon.de>2019-12-12 22:35:57 +0100
committerArthur Schiwon <blizzz@arthur-schiwon.de>2019-12-19 13:05:09 +0100
commit79eae96f45dbc953b5bc5512c82f4747c5b69c09 (patch)
treef6b5be0fdc1e799d8ea1bd55cd69cd8f27a220cf
parent9e5d6114d54479724bc7552cccd276fc691b1c37 (diff)
downloadnextcloud-server-79eae96f45dbc953b5bc5512c82f4747c5b69c09.tar.gz
nextcloud-server-79eae96f45dbc953b5bc5512c82f4747c5b69c09.zip
use Nodes API for zip streaming
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
-rw-r--r--lib/private/Streamer.php47
1 files changed, 30 insertions, 17 deletions
diff --git a/lib/private/Streamer.php b/lib/private/Streamer.php
index 549b3a6f485..a25e3468593 100644
--- a/lib/private/Streamer.php
+++ b/lib/private/Streamer.php
@@ -26,6 +26,12 @@
namespace OC;
+use OC\Files\Filesystem;
+use OCP\Files\File;
+use OCP\Files\Folder;
+use OCP\Files\InvalidPathException;
+use OCP\Files\NotFoundException;
+use OCP\Files\NotPermittedException;
use OCP\IRequest;
use ownCloud\TarStreamer\TarStreamer;
use ZipStreamer\ZipStreamer;
@@ -77,23 +83,25 @@ class Streamer {
$this->streamerInstance = new ZipStreamer(['zip64' => PHP_INT_SIZE !== 4]);
}
}
-
+
/**
* Send HTTP headers
- * @param string $name
+ * @param string $name
*/
public function sendHeaders($name){
$extension = $this->streamerInstance instanceof ZipStreamer ? '.zip' : '.tar';
$fullName = $name . $extension;
$this->streamerInstance->sendHeaders($fullName);
}
-
+
/**
* Stream directory recursively
- * @param string $dir
- * @param string $internalDir
+ *
+ * @throws NotFoundException
+ * @throws NotPermittedException
+ * @throws InvalidPathException
*/
- public function addDirRecursive($dir, $internalDir='') {
+ public function addDirRecursive(string $dir, string $internalDir = ''): void {
$dirname = basename($dir);
$rootDir = $internalDir . $dirname;
if (!empty($rootDir)) {
@@ -103,22 +111,27 @@ class Streamer {
// prevent absolute dirs
$internalDir = ltrim($internalDir, '/');
- $files= \OC\Files\Filesystem::getDirectoryContent($dir);
+ $userFolder = \OC::$server->getRootFolder()->get(Filesystem::getRoot());
+ /** @var Folder $dirNode */
+ $dirNode = $userFolder->get($rootDir);
+ $files = $dirNode->getDirectoryListing();
+
foreach($files as $file) {
- $filename = $file['name'];
- $file = $dir . '/' . $filename;
- if(\OC\Files\Filesystem::is_file($file)) {
- $filesize = \OC\Files\Filesystem::filesize($file);
- $fileTime = \OC\Files\Filesystem::filemtime($file);
- $fh = \OC\Files\Filesystem::fopen($file, 'r');
- $this->addFileFromStream($fh, $internalDir . $filename, $filesize, $fileTime);
+ if($file instanceof File) {
+ $fh = $file->fopen('r');
+ $this->addFileFromStream(
+ $fh,
+ $internalDir . $file->getName(),
+ $file->getSize(),
+ $file->getMTime()
+ );
fclose($fh);
- }elseif(\OC\Files\Filesystem::is_dir($file)) {
- $this->addDirRecursive($file, $internalDir);
+ } elseif ($file instanceof Folder) {
+ $this->addDirRecursive($file->getName(), $internalDir);
}
}
}
-
+
/**
* Add a file to the archive at the specified location and file name.
*