v1.0.4

Send Me My Files - R2 upload with short lived signed urls

julianengel julianengel ← All skills

Upload files to Cloudflare R2, AWS S3, or any S3-compatible storage and generate secure presigned download links with configurable expiration.

Downloads
1.1k
Stars
1
Versions
5
Updated
2026-02-24

Install

npx clawhub@latest install r2-upload

Documentation

Send Me My Files - R2 Upload with Short Lived Signed URLs

Upload files to Cloudflare R2 or any S3-compatible storage and generate presigned download links.

Features

  • -Upload files to R2/S3 buckets
  • -Generate presigned download URLs (configurable expiration)
  • -Support for any S3-compatible storage (R2, AWS S3, MinIO, etc.)
  • -Multiple bucket configurations
  • -Automatic content-type detection

Configuration

Create ~/.r2-upload.yml (or set R2_UPLOAD_CONFIG env var):

Default bucket (used when no bucket specified)

default: my-bucket

Bucket configurations

buckets:

my-bucket:

endpoint: https://abc123.r2.cloudflarestorage.com

access_key_id: your_access_key

secret_access_key: your_secret_key

bucket_name: my-bucket

public_url: https://files.example.com # Optional: custom domain

region: auto # For R2, use "auto"

# Additional buckets

personal:

endpoint: https://xyz789.r2.cloudflarestorage.com

access_key_id: ...

secret_access_key: ...

bucket_name: personal-files

region: auto

Cloudflare R2 Setup

1. Go to Cloudflare Dashboard → R2

2. Create a bucket

3. Go to R2 API Tokens: https://dash.cloudflare.com/<ACCOUNT_ID>/r2/api-tokens

4. Create a new API token

- Important: Apply to specific bucket (select your bucket)

- Permissions: Object Read & Write

5. Copy the Access Key ID and Secret Access Key

6. Use endpoint format: https://<account_id>.r2.cloudflarestorage.com

7. Set region: auto

AWS S3 Setup

aws-bucket:

endpoint: https://s3.us-east-1.amazonaws.com

access_key_id: ...

secret_access_key: ...

bucket_name: my-aws-bucket

region: us-east-1

Usage

Upload a file

r2-upload /path/to/file.pdf

Returns: https://files.example.com/abc123/file.pdf?signature=...

Upload with custom path

r2-upload /path/to/file.pdf --key uploads/2026/file.pdf

Upload to specific bucket

r2-upload /path/to/file.pdf --bucket personal

Custom expiration (default: 5 minutes)

r2-upload /path/to/file.pdf --expires 24h

r2-upload /path/to/file.pdf --expires 1d

r2-upload /path/to/file.pdf --expires 300 # seconds

Public URL (no signature)

r2-upload /path/to/file.pdf --public

Tools

  • -r2_upload - Upload file and get presigned URL
  • -r2_list - List recent uploads
  • -r2_delete - Delete a file

Environment Variables

  • -R2_UPLOAD_CONFIG - Path to config file (default: ~/.r2-upload.yml)
  • -R2_DEFAULT_BUCKET - Override default bucket
  • -R2_DEFAULT_EXPIRES - Default expiration in seconds (default: 300 = 5 minutes)

Notes

  • -Uploaded files are stored with their original filename unless --key is specified
  • -Automatic UUID prefix added to prevent collisions (e.g., abc123/file.pdf)
  • -Content-Type automatically detected from file extension
  • -Presigned URLs expire after the configured duration

Launch an agent with Send Me My Files - R2 upload with short lived signed urls on Termo.