# 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 ```go 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 ./...`