minima-r2-sdk

Crates.iominima-r2-sdk
lib.rsminima-r2-sdk
version0.1.0
created_at2025-12-13 01:04:51.031676+00
updated_at2025-12-13 01:04:51.031676+00
descriptionMinimal Cloudflare R2 SDK with manual S3v4 signing
homepage
repositoryhttps://github.com/minima-software/r2-sdk
max_upload_size
id1982414
size114,697
Loldinis (Overstrider)

documentation

README

minima-r2-sdk

Minimal Cloudflare R2 SDK for Rust.

Install

[dependencies]
minima-r2-sdk = "0.1"
tokio = { version = "1", features = ["rt-multi-thread", "macros"] }

Usage

use minima_r2_sdk::{R2Client, Credentials, PutObjectRequest, Bytes};

#[tokio::main]
async fn main() -> Result<(), minima_r2_sdk::Error> {
    let creds = Credentials::new("access_key", "secret_key");
    let client = R2Client::new("account_id", creds);

    // Upload
    client.put_object(PutObjectRequest {
        bucket: "my-bucket",
        key: "file.txt",
        body: Bytes::from("Hello R2!"),
        content_type: Some("text/plain"),
        metadata: None,
    }).await?;

    // Download
    let obj = client.get_object("my-bucket", "file.txt").await?;
    println!("{}", String::from_utf8_lossy(&obj.body));

    // List
    let list = client.list_objects_v2(minima_r2_sdk::ListObjectsV2Request {
        bucket: "my-bucket",
        prefix: Some("prefix/"),
        ..Default::default()
    }).await?;

    // Delete
    client.delete_object("my-bucket", "file.txt").await?;

    Ok(())
}

Credentials from Environment

// Reads R2_ACCESS_KEY_ID and R2_SECRET_ACCESS_KEY
let creds = Credentials::from_env()?;

Multipart Upload (>5MB files)

let upload = client.create_multipart_upload("bucket", "large.bin").await?;

let part = client.upload_part(UploadPartRequest {
    bucket: "bucket",
    key: "large.bin",
    upload_id: &upload.upload_id,
    part_number: 1,
    body: Bytes::from(data),
}).await?;

client.complete_multipart_upload(CompleteMultipartUploadRequest {
    bucket: "bucket",
    key: "large.bin",
    upload_id: &upload.upload_id,
    parts: vec![CompletedPart { part_number: 1, etag: part.etag }],
}).await?;

API

Method Description
get_object Download object
put_object Upload object
delete_object Delete object
head_object Get metadata
list_objects_v2 List objects
create_multipart_upload Start multipart
upload_part Upload part
complete_multipart_upload Finish multipart
abort_multipart_upload Cancel multipart
list_parts List parts

License

MIT

Commit count: 0

cargo fmt