aboutsummaryrefslogtreecommitdiffhomepage
path: root/Digitigrade/StorageProvider.php
diff options
context:
space:
mode:
authorwinter2025-01-18 00:22:36 +0000
committerwinter2025-01-18 00:22:36 +0000
commitba61c6435b668375a411716f3a35447aa38b03a4 (patch)
treec305f2a994888a773d2b4a781176b8dffbe90576 /Digitigrade/StorageProvider.php
parent141f11ba980fe019c12f0a8fa456f520ec48e522 (diff)
implement object storage
Diffstat (limited to 'Digitigrade/StorageProvider.php')
-rw-r--r--Digitigrade/StorageProvider.php62
1 files changed, 62 insertions, 0 deletions
diff --git a/Digitigrade/StorageProvider.php b/Digitigrade/StorageProvider.php
new file mode 100644
index 0000000..53b3549
--- /dev/null
+++ b/Digitigrade/StorageProvider.php
@@ -0,0 +1,62 @@
+<?php
+namespace Digitigrade;
+
+abstract class StorageProvider {
+ public function __construct() {
+ }
+
+ /**
+ * Moves a file from the local filesystem to the storage backend. Deletes
+ * the file from the local filesystem.
+ * @param string $path the path to the file to store
+ * @param bool $checkIsUpload if true, verifies that the local file was
+ * uploaded via PHP's HHTP upload mechanism before doing anything with it
+ * @return ?string a token that uniquely identifies the new object on this
+ * provider, or null if it could not be stored for any reason
+ */
+ public function storeFile(string $path, bool $checkIsUpload = false): ?string {
+ if ($checkIsUpload && !is_uploaded_file($path)) {
+ return null;
+ }
+ return $this->storeFileInternal($path);
+ }
+
+ abstract protected function storeFileInternal(string $path): ?string;
+
+ /**
+ * @param string $token the token of the object to look for
+ * @return bool whether the requested object exists or not
+ */
+ abstract public function exists(string $token): bool;
+
+ /**
+ * Retrieves an object's contents from the storage backend.
+ * @param string $token the token of the object to retrieve
+ * @return ?string the entire content, or null if not found
+ */
+ abstract public function retrieve(string $token): ?string;
+
+ /**
+ * Gets a direct, public URL to the given object, if possible.
+ * @param string $token the token of the object to look up
+ * @return ?string the URL or null if one is not available
+ */
+ abstract public function directUrl(string $token): ?string;
+
+ /**
+ * Streams the data of an object to the web client (stdout).
+ * @param string $token the token of the object to retrieve
+ * @param ?string $mimetype value of the Content-Type header to send (if
+ * null, will try to figure it out anyway)
+ * @return void
+ */
+ abstract public function passthrough(string $token, ?string $mimetype = null);
+
+ /**
+ * Deletes an object from the backend. If the object doesn't exist, does
+ * nothing.
+ * @param string $token the token of the object to delete
+ * @return void
+ */
+ abstract public function delete(string $token);
+} \ No newline at end of file