Files
storage/CLAUDE.md
T
argoyle 41d0edf378
storage / test (pull_request) Successful in 7m25s
storage / vulnerabilities (pull_request) Successful in 7m22s
pre-commit / pre-commit (pull_request) Successful in 12m49s
chore: migrate module path to gitea.unbound.se
Update module path from git.unbound.se to gitea.unbound.se for Go module
discovery over HTTPS.
2026-01-09 13:43:53 +01:00

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 ./...