41d0edf378
Update module path from git.unbound.se to gitea.unbound.se for Go module discovery over HTTPS.
1.4 KiB
1.4 KiB
storage
Standalone Go library for AWS S3 storage operations.
Note: This is an independent library, not part of the Shiny ecosystem, though it is currently only used by Shiny services.
Purpose
Provides standardized S3 object storage utilities with presigned URL generation. Used by services that need to store and serve files (PDFs, images, etc.).
Usage
import "gitea.unbound.se/unboundsoftware/storage"
// Option 1: Managed uploads (multipart, 5MB part size) - loads AWS config automatically
s3Storage, err := storage.New("my-bucket")
// Option 2: Direct uploads with custom AWS config
cfg, _ := config.LoadDefaultConfig(context.Background())
s3Storage := storage.NewS3(cfg, "my-bucket")
// Upload and get presigned URL (15-minute expiration)
url, err := s3Storage.Store("path/to/file.pdf", reader, "application/pdf")
Features
- Managed uploads (
New) - Uses upload manager with 5MB multipart chunks for large files - Direct uploads (
NewS3) - Uses PutObject directly, allows custom AWS config - Presigned URLs - 15-minute expiration for secure access
Configuration
Uses AWS SDK v2, loading config from:
- Environment variables (
AWS_REGION,AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY) - Shared config files (
~/.aws/config,~/.aws/credentials) - IAM roles (on AWS infrastructure)
Development
- Go 1.23+
- Run tests:
go test ./...