Files
storage/README.md
T
argoyle 64664a12f7
storage / test (push) Successful in 22s
storage / vulnerabilities (push) Successful in 1m22s
Unbound Release / Check Preconditions (push) Successful in 1s
Unbound Release / Create Tag (push) Skipped
pre-commit / pre-commit (push) Successful in 3m36s
Unbound Release / Generate Changelog and Handle PR (push) Successful in 7s
Unbound Release / Create Release (push) Successful in 5s
Release / release (push) Successful in 6m20s
feat: move module path to git.unbound.se (#239)
2026-10-17 18:14:45 +00:00

56 lines
1.4 KiB
Markdown

# Storage Module
Shared storage utilities for AWS S3.
## Features
- S3 object storage with presigned URL generation
- Two upload strategies: managed uploads (for large files) and direct uploads
- Configurable part size for multipart uploads
- 15-minute presigned URL expiration
## Usage
### Using the Upload Manager (recommended for large files)
```go
import "git.unbound.se/unboundsoftware/storage"
// Create storage with automatic AWS config loading
s3Storage, err := storage.New("my-bucket")
if err != nil {
// handle error
}
// Upload a file and get a presigned URL
url, err := s3Storage.Store("path/to/file.pdf", fileReader, "application/pdf")
```
### Using Direct Upload (for smaller files or custom config)
```go
import (
"github.com/aws/aws-sdk-go-v2/config"
"git.unbound.se/unboundsoftware/storage"
)
// Load custom AWS config
cfg, err := config.LoadDefaultConfig(context.Background())
if err != nil {
// handle error
}
// Create storage with custom config
s3Storage := storage.NewS3(cfg, "my-bucket")
// Upload a file and get a presigned URL
url, err := s3Storage.Store("path/to/file.pdf", fileReader, "application/pdf")
```
## Configuration
The storage module uses AWS SDK v2 and loads configuration from:
- Environment variables (`AWS_REGION`, `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`)
- Shared configuration files (`~/.aws/config`, `~/.aws/credentials`)
- IAM roles (when running on AWS infrastructure)