An API wrapper for DigitalOcean's Spaces object storage designed for easy use.
Note: This version of the API wrapper is patched up to work AWS v2-signatures, in order to be able to use special characters in the file name (i.e. the @-sign).
Related issues on DigitalOcean:
- https://www.digitalocean.com/community/questions/signaturedoesnotmatch-error-with-special-characters-in-the-file-name
- https://www.digitalocean.com/community/questions/spaces-php-sdk-changing-acl-error-when-filepath-or-file-contains-symbols-like-an-at
- Using Composer:
Update composer.json and add this repository:
"repositories":[
{
"type": "vcs",
"url": "[email protected]:MelvinRook/Spaces-API.git"
}
],
Require the original dependency:
"sociallydev/spaces-api": "dev-master",
//Either:
require_once("spaces.php");
//OR COMPOSER:
require_once("vendor/autoload.php"); //Install first by executing: composer require SociallyDev/Spaces-API in your project's directory.
$key = "EXAMPLE_KEY";
$secret = "EXAMPLE_SECRET";
$space_name = "my-space";
$region = "nyc3";
$space = new SpacesConnect($key, $secret, $space_name, $region);
All available options:
SpacesConnect(REQUIRED KEY, REQUIRED SECRET, OPTIONAL SPACE's NAME, OPTIONAL REGION, OPTIONAL HOST);
// Don't start any path with a forward slash, or it will give "SignatureDoesNotMatch" exception
$path_to_file = "image.png";
$space->UploadFile($path_to_file, "public");
$download_file = "image.png";
$save_as = "folder/downloaded-image.png";
$space->DownloadFile($download_file, $save_as);
All available options:
$file_name = "image.png";
$space->DeleteObject($file_name);
All available options:
$file = "image.png";
$space->MakePublic($file);
$space->MakePrivate($file);
All available options:
$file = "image.png";
$valid_for = "1 day";
$link = $space->CreateTemporaryURL($file, $valid_for);
All available options:
//List all files and folders
$files = $space->ListObjects();
//Check if a file/folder by that name already exists. True/False.
$space->DoesObjectExist($file_name);
//Pull information about a single object.
$file_info = $space->GetObject($file_name);
//Upload a complete directory instead of a single file.
$space->UploadDirectory($path_to_directory, $key_prefix);
//Pull Access Control List information.
$acl = $space-ListObjectACL($file_name);
//Update Access Control List information.
$space->PutObjectACL($file_name, $acl_info_array);
$new_space = "my-new-space";
$space->CreateSpace($new_space);
All available options:
$new_space = "my-new-space";
$space->SetSpace($new_space);
All available options:
//List all Spaces available in account.
$spaces = $space->ListSpaces();
//Delete a Space.
$space->DestroyThisSpace();
//Download whole Space to a folder.
$space->DownloadSpaceToDirectory($directory_to_download_to);
//Get the name of the current Space.
$space_name = $space->GetSpaceName();
//Pull the CORS policy of the Space.
$cors = $space->ListCORS();
//Update the CORS policy of the Space.
$space->PutCORS($new_policy);
//Pull the Access Control List information of the Space.
$acl = $space->ListSpaceACL();
//Update the Access Control List information of the Space.
$space->PutSpaceACL($new_acl);
try {
$space->CreateSpace("dev");
} catch (\SpacesAPIException $e) {
$error = $e->GetError();
//Error management code.
echo "<pre>";
print_r($error);
/*
EG:
Array (
[message] => Bucket already exists
[code] => BucketAlreadyExists
[type] => client
[http_code] => 409
)
*/
}