41d0edf378
Update module path from git.unbound.se to gitea.unbound.se for Go module discovery over HTTPS.
56 lines
1.4 KiB
Markdown
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 "gitea.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)
|