Files
storage/CLAUDE.md
T
argoyle 887d3b8517
storage / vulnerabilities (pull_request) Successful in 2m45s
storage / test (pull_request) Successful in 2m57s
chore: migrate from GitLab to Gitea
- Update module path from gitlab.com/unboundsoftware/storage to
  git.unbound.se/unboundsoftware/storage
- Update import examples in documentation (CLAUDE.md, README.md)
- Remove .gitlab-ci.yml (GitLab CI pipeline no longer needed)
- Remove gitlab-ci-linter pre-commit hook
- Update go-imports local path in pre-commit config

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-09 08:00:42 +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 "git.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 ./...