S3 Compatible Storage
Description
Section titled “Description”This module allows performing storage operations with any service compatible with Amazon’s S3 protocol. It works with providers like Linode Object Storage, DigitalOcean Spaces, MinIO, Wasabi, Backblaze B2, Cloudflare R2 and any other service that implements the S3 API.
The implementation is identical to the AWS S3 module but with support for custom endpoints and the forcePathStyle option enabled by default for compatibility. It supports: list buckets, list objects, download, upload (with ACL support), delete, get metadata, copy and generate pre-signed URLs.
Configuration
Section titled “Configuration”| Parameter | Type | Required | Description |
|---|---|---|---|
| credentials_id | credentials | Yes | S3-compatible storage account |
| operation | select | Yes | Operation: listBuckets, listObjects, getObject, putObject, deleteObject, headObject, copyObject, getPresignedUrl |
| bucket | text | Conditional | Bucket/container name |
| key | text | Conditional | Object key/path |
| prefix | text | No | Prefix to filter (folder) |
| maxKeys | number | No | Maximum objects to list (1-1000, default: 100) |
| returnAsBase64 | boolean | No | Return as Base64 (for binaries) |
| bodyKey | text | No | Field in input data with the content (default: fileContent) |
| contentType | select | No | File MIME type |
| isBase64 | boolean | No | Content is Base64 encoded |
| acl | select | No | Permissions: private, public-read, public-read-write, authenticated-read |
| sourceKey | text | Conditional | Source object key (for copying) |
| destinationKey | text | Conditional | Destination key (for copying) |
| destinationBucket | text | No | Destination bucket (empty = same bucket) |
| expiresIn | select | No | URL expiration: 300 to 604800 seconds |
| outputKey | text | No | Key where to store the result |
Credentials
Section titled “Credentials”Service type: s3_compatible. Stored in the servicecredentials table.
Configuration fields:
- endpoint: Service endpoint URL (e.g.: https://us-east-1.linodeobjects.com)
- accessKeyId: Service Access Key
- secretAccessKey: Service Secret Key
- region: Service region (default: us-east-1)
- forcePathStyle: Use path-style (default: true, recommended for compatibility)
Output
Section titled “Output”{ "nextModule": "siguiente_modulo", "data": { "objects": [ { "key": "archivos/documento.pdf", "size": 98765, "lastModified": "2025-01-15T10:30:00.000Z", "etag": "\"def456\"" } ], "folders": ["archivos/", "backups/"], "isTruncated": false }, "_meta_": { "operation": "listObjects", "bucket": "mi-contenedor", "service": "s3_compatible" }}Usage Example
Section titled “Usage Example”Basic case - Upload file with public ACL
Section titled “Basic case - Upload file with public ACL”{ "credentials_id": 1, "operation": "putObject", "bucket": "mi-contenedor", "key": "imagenes/foto.jpg", "bodyKey": "fileContent", "contentType": "image/jpeg", "isBase64": true, "acl": "public-read"}API Used
Section titled “API Used”- S3 protocol via @aws-sdk/client-s3 with custom endpoint
- Compatible with: Linode, DigitalOcean Spaces, MinIO, Wasabi, Backblaze B2, Cloudflare R2
- Unlike the AWS S3 module, this module supports a custom endpoint and forcePathStyle
- The ACL parameter allows controlling access permissions per object (not available on all providers)
- forcePathStyle is enabled by default for maximum compatibility with S3 providers
- Pre-signed URLs work with most S3-compatible providers
- Some providers may not support all operations (e.g.: versioning, storage classes)
- The
continueOnErrorparameter allows the workflow to continue even if the operation fails