SDK Examples

Cloodsy S3 works with any S3-compatible SDK. Here are examples for popular languages.

Python (boto3)

Setup

pip install boto3

Basic Operations

import boto3

s3 = boto3.client(
    "s3",
    endpoint_url="http://localhost:9000",
    aws_access_key_id="your-access-key",
    aws_secret_access_key="your-secret-key",
    region_name="us-east-1",
)

# Upload a file
s3.upload_file("photo.jpg", "photos", "photo.jpg")

# Download a file
s3.download_file("photos", "photo.jpg", "downloaded.jpg")

# List objects
response = s3.list_objects_v2(Bucket="photos")
for obj in response.get("Contents", []):
    print(f"{obj['Key']} ({obj['Size']} bytes)")

# Delete an object
s3.delete_object(Bucket="photos", Key="photo.jpg")

Upload with metadata

s3.put_object(
    Bucket="photos",
    Key="photo.jpg",
    Body=open("photo.jpg", "rb"),
    ContentType="image/jpeg",
    Metadata={"author": "jane", "camera": "nikon"},
)

Go

Setup

go get github.com/aws/aws-sdk-go

Basic Operations

package main

import (
    "fmt"
    "os"

    "github.com/aws/aws-sdk-go/aws"
    "github.com/aws/aws-sdk-go/aws/credentials"
    "github.com/aws/aws-sdk-go/aws/session"
    "github.com/aws/aws-sdk-go/service/s3"
    "github.com/aws/aws-sdk-go/service/s3/s3manager"
)

func main() {
    sess := session.Must(session.NewSession(&aws.Config{
        Endpoint:         aws.String("http://localhost:9000"),
        Region:           aws.String("us-east-1"),
        Credentials:      credentials.NewStaticCredentials("your-access-key", "your-secret-key", ""),
        S3ForcePathStyle: aws.Bool(true),
    }))

    svc := s3.New(sess)

    // List buckets
    result, _ := svc.ListBuckets(nil)
    for _, b := range result.Buckets {
        fmt.Println(*b.Name)
    }

    // Upload a file
    uploader := s3manager.NewUploader(sess)
    file, _ := os.Open("photo.jpg")
    defer file.Close()

    uploader.Upload(&s3manager.UploadInput{
        Bucket: aws.String("photos"),
        Key:    aws.String("photo.jpg"),
        Body:   file,
    })
}

JavaScript (AWS SDK v3)

Setup

npm install @aws-sdk/client-s3

Basic Operations

import { S3Client, PutObjectCommand, ListObjectsV2Command } from "@aws-sdk/client-s3";
import { readFileSync } from "fs";

const s3 = new S3Client({
    endpoint: "http://localhost:9000",
    region: "us-east-1",
    credentials: {
        accessKeyId: "your-access-key",
        secretAccessKey: "your-secret-key",
    },
    forcePathStyle: true,
});

// Upload
await s3.send(new PutObjectCommand({
    Bucket: "photos",
    Key: "photo.jpg",
    Body: readFileSync("photo.jpg"),
}));

// List objects
const response = await s3.send(new ListObjectsV2Command({
    Bucket: "photos",
}));

for (const obj of response.Contents ?? []) {
    console.log(`${obj.Key} (${obj.Size} bytes)`);
}