diff --git a/lib/private/Streamer.php b/lib/private/Streamer.php
index a25e3468593375ab479b3ccfa304337ea15d78de..23029d989128af3173e9e1b26f71954413afa457 100644
--- a/lib/private/Streamer.php
+++ b/lib/private/Streamer.php
@@ -113,12 +113,16 @@ class Streamer {
 
 		$userFolder = \OC::$server->getRootFolder()->get(Filesystem::getRoot());
 		/** @var Folder $dirNode */
-		$dirNode = $userFolder->get($rootDir);
+		$dirNode = $userFolder->get($dir);
 		$files = $dirNode->getDirectoryListing();
 
 		foreach($files as $file) {
 			if($file instanceof File) {
-				$fh = $file->fopen('r');
+				try {
+					$fh = $file->fopen('r');
+				} catch (NotPermittedException $e) {
+					continue;
+				}
 				$this->addFileFromStream(
 					$fh,
 					$internalDir . $file->getName(),
@@ -127,7 +131,9 @@ class Streamer {
 				);
 				fclose($fh);
 			} elseif ($file instanceof Folder) {
-				$this->addDirRecursive($file->getName(), $internalDir);
+				if($file->isReadable()) {
+					$this->addDirRecursive($dir . '/' . $file->getName(), $internalDir);
+				}
 			}
 		}
 	}
diff --git a/lib/private/legacy/files.php b/lib/private/legacy/files.php
index 28396a9d07624043000cfbb549228d10e5cb2393..ed26a125a6fc2399ff03aace5d047a64850d0a7e 100644
--- a/lib/private/legacy/files.php
+++ b/lib/private/legacy/files.php
@@ -180,7 +180,11 @@ class OC_Files {
 						$userFolder = \OC::$server->getRootFolder()->get(\OC\Files\Filesystem::getRoot());
 						$file = $userFolder->get($file);
 						if($file instanceof \OC\Files\Node\File) {
-							$fh = $file->fopen('r');
+							try {
+								$fh = $file->fopen('r');
+							} catch (\OCP\Files\NotPermittedException $e) {
+								continue;
+							}
 							$fileSize = $file->getSize();
 							$fileTime = $file->getMTime();
 						} else {
@@ -309,7 +313,7 @@ class OC_Files {
 
 		OC_Util::obEnd();
 		$view->lockFile($filename, ILockingProvider::LOCK_SHARED);
-		
+
 		$rangeArray = array();
 
 		if (isset($params['range']) && substr($params['range'], 0, 6) === 'bytes=') {