# 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)