
By johngerome
A provider for uploading files to DigitalOcean Spaces
released June 8, 2025
npm install @johngerome/strapi-provider-upload-spacesA Strapi provider for uploading files to DigitalOcean Spaces. Compatible with Strapi v4 and v5.
npm install @johngerome/strapi-provider-upload-spacesyarn add @johngerome/strapi-provider-upload-spacespnpm add @johngerome/strapi-provider-upload-spacesEdit your Strapi configuration in ./config/plugins.js:
module.exports = ({ env }) => ({
upload: {
config: {
provider: '@johngerome/strapi-provider-upload-spaces',
providerOptions: {
credentials: {
accessKeyId: env('DO_SPACE_ACCESS_KEY'),
secretAccessKey: env('DO_SPACE_SECRET_KEY'),
},
endpoint: env('DO_SPACE_ENDPOINT'), // e.g., 'nyc3.digitaloceanspaces.com'
region: env('DO_SPACE_REGION', 'us-east-1'),
bucket: env('DO_SPACE_BUCKET'),
directory: env('DO_SPACE_DIRECTORY', ''), // Optional, defaults to root
cdn: env('DO_SPACE_CDN'), // Optional, CDN URL if configured
ACL: env('DO_SPACE_ACL', 'public-read'), // Optional, defaults to 'public-read'
},
actionOptions: {
upload: {},
uploadStream: {},
delete: {},
},
},
},
});Due to the default settings in the Strapi Security Middleware you will need to modify the contentSecurityPolicy settings to properly see thumbnail previews in the Media Library.
Edit your Strapi configuration in ./config/middlewares.js:
module.exports = [
// ...
{
name: 'strapi::security',
config: {
contentSecurityPolicy: {
useDefaults: true,
directives: {
'connect-src': ["'self'", 'https:'],
'img-src': [
"'self'",
'data:',
'blob:',
'market-assets.strapi.io',
'yourBucketName.yourRegion.cdn.digitaloceanspaces.com', // with CDN
'yourBucketName.yourRegion.digitaloceanspaces.com',
],
'media-src': [
"'self'",
'data:',
'blob:',
'market-assets.strapi.io',
'yourBucketName.yourRegion.cdn.digitaloceanspaces.com', // with CDN
'yourBucketName.yourRegion.digitaloceanspaces.com',
],
upgradeInsecureRequests: null,
},
},
},
},
// ...
];Add these variables to your .env file:
DO_SPACE_ACCESS_KEY=your_access_key
DO_SPACE_SECRET_KEY=your_secret_key
DO_SPACE_ENDPOINT=your_space_endpoint
DO_SPACE_REGION=your_space_region
DO_SPACE_BUCKET=your_space_name
DO_SPACE_DIRECTORY=optional_directory_path
DO_SPACE_CDN=optional_cdn_url
DO_SPACE_ACL=optional_acl_settingMIT
Share your work with the community and get it listed in the Strapi ecosystem for everyone to discover and use.
Submit
