DigitalOcean Spaces offers a cost-effective, S3-compatible object storage solution that’s perfect for developers looking to store and serve files, media, and static assets. In this guide, we’ll explore how to get started with DigitalOcean Spaces and demonstrate its compatibility with existing S3 tools and libraries.
What is DigitalOcean Spaces?
DigitalOcean Spaces is an object storage service that provides:
- S3-compatible API
- Built-in CDN functionality
- Simple pricing model ($5/month for 250GB storage + 1TB bandwidth) here official pricing page
- Geographic distribution options
- Easy-to-use web interface
Getting Started
1. Creating Your First Space
- Log into your DigitalOcean account (if you dont have an account here our link just to start straight away with 200$)
- Navigate to “Spaces” in the left sidebar
- Click “Create Space”
- Choose a region close to your target audience
- Set a unique name for your Space
- Configure file access settings (public/private)

If you go to the created DO Bucket
2. Generating Access Keys
# You'll need these credentials for API access
Spaces Access Key: YOUR_ACCESS_KEY
Spaces Secret Key: YOUR_SECRET_KEY
Before using the API, generate access keys from the DigitalOcean control panel:
- Go to API > Spaces keys
- Generate New Key
- Save both the access key and secret key securely
Using the AWS SDK with Spaces
Since Spaces is S3-compatible, you can use the AWS SDK with minimal modifications. Here’s an example using Python:
import boto3
import os
do_bucketname = 'superbucketdo'
# Configure the client
session = boto3.session.Session()
client = session.client('s3',
region_name='fra1', # DigitalOcean region
endpoint_url='https://fra1.digitaloceanspaces.com', # Region endpoint
aws_access_key_id='DO00L3GQPYTXXXXXX',
aws_secret_access_key='cHUzVytBVeeIdDhEaacF1cl88LXXXXXXXXXXXXXXXXXXXXXXXX'
)
# Step 1: Generate a dummy file locally with some content
file_name = 'local_file.txt'
with open(file_name, 'w') as file:
file.write('I like DigitalOcean Spaces.')
# Step 2: # Upload a file
client.upload_file(
'local_file.txt',
do_bucketname,
'remote_file.txt',
ExtraArgs={'ACL': 'private'} # Make file private
)
# Step 3: List the files in the specified space
response = client.list_objects_v2(Bucket=do_bucketname)
if 'Contents' in response:
for obj in response['Contents']:
print(obj['Key'])
else:
print('No files found.')
Common Operations
Uploading Files
# Upload with metadata
client.put_object(
Bucket=do_bucketname,
Key='remote_file.txt',
Body='File contents',
Metadata={
'Content-Type': 'text/plain',
'x-amz-meta-custom': 'custom-value',
'access_type': 'private'
}
)
Here i have uploaded a file on the fly with the name called “remote_file.txt” and content “File contents” and made it private. also added a new key-value pair for metadata.
Downloading Files
# Download file
client.download_file(
'your-space-name',
'remote_file.txt',
'downloaded_file.txt'
)
Here i am downloading one file from DigitalOcean Spaces

Managing Access Control
Access control can be managed via DigitalOcean Spaces console or via code like below code, a file/object in DigitalOcean bucket either can be
- Public
- Private

# Make object public
client.put_object_acl(
Bucket='your-space-name',
Key='file.txt',
ACL='public-read'
)
# Make object private
client.put_object_acl(
Bucket='your-space-name',
Key='file.txt',
ACL='private'
)
Using the CDN
DigitalOcean Spaces includes a built-in CDN. To enable it:
- Navigate to your Space settings
- Enable CDN
- Use the CDN endpoint:
https://your-space-name.nyc3.cdn.digitaloceanspaces.com
Best Practices
- Region Selection: Choose a region closest to your users for optimal performance
- Security:
- Never commit access keys to version control
- Use environment variables for credentials
- Implement proper bucket policies
- Performance:
- Enable CDN for frequently accessed files
- Use appropriate file permissions
- Implement caching headers
- Cost Optimization:
- Monitor bandwidth usage
- Clean up unused files
- Use lifecycle policies for automatic cleanup
Comparison with AWS S3
Advantages of Spaces:
- Simpler pricing model
- Included CDN
- Easy-to-use interface
- Good integration with DigitalOcean services
Limitations:
- Fewer regions available
- Less advanced features compared to S3
- Limited analytics and monitoring
Conclusion
DigitalOcean Spaces provides a robust, cost-effective alternative to AWS S3 for many use cases. Its S3-compatible API makes migration straightforward, while its simple pricing and included CDN make it an attractive option for developers and small to medium-sized applications.
Remember to always follow security best practices and properly manage your access credentials when working with any cloud storage solution.
Loved the breakdown! For those diving into AI-driven strategies, the AI Tiktok Assistant from tyy.AI Tools is a game-changer for streamlining content creation and audience engagement.
Creating Ghibli-style art is easier than ever with tools like 지브리 AI. The blend of emotion and detail in these AI-generated images truly captures the magic of Miyazaki’s world. A great resource for any creative looking to add whimsy to their work.
Great insights! For those diving into AI-driven strategies, checking out AI Marketing Tools can streamline the hunt for the best solutions.
That’s a great point about accessibility in shooters – so often overlooked! It’s cool to see platforms like jl boss focusing on a smooth experience, from login to exploring games. Seamless integration is key, right? Really enhances the fun!
Really insightful article! It’s great to see platforms like jljl555</a> prioritizing a smooth, localized experience for Filipino players – quick logins & local payment options are key for responsible fun! 👍