diff options
| author | winter | 2025-01-18 00:22:36 +0000 |
|---|---|---|
| committer | winter | 2025-01-18 00:22:36 +0000 |
| commit | ba61c6435b668375a411716f3a35447aa38b03a4 (patch) | |
| tree | c305f2a994888a773d2b4a781176b8dffbe90576 /Digitigrade/StorageProvider.php | |
| parent | 141f11ba980fe019c12f0a8fa456f520ec48e522 (diff) | |
implement object storage
Diffstat (limited to 'Digitigrade/StorageProvider.php')
| -rw-r--r-- | Digitigrade/StorageProvider.php | 62 |
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 |
