Files
storage/CLAUDE.md
T
argoyle 534427f2b1
storage / test (pull_request) Successful in 1m36s
storage / vulnerabilities (pull_request) Successful in 1m11s
feat: add Gitea Actions workflow
2026-01-08 14:09:14 +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 "gitlab.com/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 ./...