diff --git a/apps/dav/lib/Connector/Sabre/File.php b/apps/dav/lib/Connector/Sabre/File.php
index fc30393bb461817ea6cbd26f18d453753df3df69..f948f0f552d31c3fe9a9577fb8f5e393bf8df5ea 100644
--- a/apps/dav/lib/Connector/Sabre/File.php
+++ b/apps/dav/lib/Connector/Sabre/File.php
@@ -50,6 +50,7 @@ use OCP\Files\ForbiddenException;
 use OCP\Files\InvalidContentException;
 use OCP\Files\InvalidPathException;
 use OCP\Files\LockNotAcquiredException;
+use OCP\Files\NotFoundException;
 use OCP\Files\NotPermittedException;
 use OCP\Files\Storage;
 use OCP\Files\StorageNotAvailableException;
@@ -592,6 +593,9 @@ class File extends Node implements IFile {
 		if ($e instanceof StorageNotAvailableException) {
 			throw new ServiceUnavailable('Failed to write file contents: ' . $e->getMessage(), 0, $e);
 		}
+		if ($e instanceof NotFoundException) {
+			throw new NotFound('File not found: ' . $e->getMessage(), 0, $e);
+		}
 
 		throw new \Sabre\DAV\Exception($e->getMessage(), 0, $e);
 	}
diff --git a/lib/private/Files/ObjectStore/ObjectStoreStorage.php b/lib/private/Files/ObjectStore/ObjectStoreStorage.php
index 71acd27783c82192df2a3d2608fa68b56bc79701..26db551a384ef7f78e0ad18061d772ecaba07aba 100644
--- a/lib/private/Files/ObjectStore/ObjectStoreStorage.php
+++ b/lib/private/Files/ObjectStore/ObjectStoreStorage.php
@@ -29,6 +29,7 @@ use Icewind\Streams\CallbackWrapper;
 use Icewind\Streams\IteratorDirectory;
 use OC\Files\Cache\CacheEntry;
 use OC\Files\Stream\CountReadStream;
+use OCP\Files\NotFoundException;
 use OCP\Files\ObjectStore\IObjectStore;
 
 class ObjectStoreStorage extends \OC\Files\Storage\Common {
@@ -275,10 +276,16 @@ class ObjectStoreStorage extends \OC\Files\Storage\Common {
 				if (is_array($stat)) {
 					try {
 						return $this->objectStore->readObject($this->getURN($stat['fileid']));
+					} catch (NotFoundException $e) {
+						$this->logger->logException($e, [
+							'app' => 'objectstore',
+							'message' => 'Could not get object ' . $this->getURN($stat['fileid']) . ' for file ' . $path,
+						]);
+						throw $e;
 					} catch (\Exception $ex) {
 						$this->logger->logException($ex, [
 							'app' => 'objectstore',
-							'message' => 'Count not get object ' . $this->getURN($stat['fileid']) . ' for file ' . $path,
+							'message' => 'Could not get object ' . $this->getURN($stat['fileid']) . ' for file ' . $path,
 						]);
 						return false;
 					}
diff --git a/lib/private/Files/ObjectStore/Swift.php b/lib/private/Files/ObjectStore/Swift.php
index 6bb01506c4c214c13a32536f37df4a8695d03e3a..e379e54d0180648b2e9c5cd05bf0a310422efc70 100644
--- a/lib/private/Files/ObjectStore/Swift.php
+++ b/lib/private/Files/ObjectStore/Swift.php
@@ -27,8 +27,10 @@ namespace OC\Files\ObjectStore;
 
 use function GuzzleHttp\Psr7\stream_for;
 use Icewind\Streams\RetryWrapper;
+use OCP\Files\NotFoundException;
 use OCP\Files\ObjectStore\IObjectStore;
 use OCP\Files\StorageAuthException;
+use OpenStack\Common\Error\BadResponseError;
 
 class Swift implements IObjectStore {
 	/**
@@ -84,13 +86,22 @@ class Swift implements IObjectStore {
 	 * @param string $urn the unified resource name used to identify the object
 	 * @return resource stream with the read data
 	 * @throws \Exception from openstack lib when something goes wrong
+	 * @throws NotFoundException if file does not exist
 	 */
 	public function readObject($urn) {
-		$object = $this->getContainer()->getObject($urn);
-
-		// we need to keep a reference to objectContent or
-		// the stream will be closed before we can do anything with it
-		$objectContent = $object->download();
+		try {
+			$object = $this->getContainer()->getObject($urn);
+
+			// we need to keep a reference to objectContent or
+			// the stream will be closed before we can do anything with it
+			$objectContent = $object->download();
+		} catch (BadResponseError $e) {
+			if ($e->getResponse()->getStatusCode() === 404) {
+				throw new NotFoundException("object $urn not found in object store");
+			} else {
+				throw $e;
+			}
+		}
 		$objectContent->rewind();
 
 		$stream = $objectContent->detach();
diff --git a/lib/public/Files/ObjectStore/IObjectStore.php b/lib/public/Files/ObjectStore/IObjectStore.php
index 8e9df5a55a3fc3f33f2bac4cc8426e4aca90c74d..628fd5852da9ca669bfb1b44b67b89684e14ffb8 100644
--- a/lib/public/Files/ObjectStore/IObjectStore.php
+++ b/lib/public/Files/ObjectStore/IObjectStore.php
@@ -23,6 +23,8 @@
  */
 namespace OCP\Files\ObjectStore;
 
+use OCP\Files\NotFoundException;
+
 /**
  * Interface IObjectStore
  *
@@ -41,6 +43,7 @@ interface IObjectStore {
 	 * @param string $urn the unified resource name used to identify the object
 	 * @return resource stream with the read data
 	 * @throws \Exception when something goes wrong, message will be logged
+	 * @throws NotFoundException if file does not exist
 	 * @since 7.0.0
 	 */
 	public function readObject($urn);