#amazon-s3 #s3 #web #api-bindings #s3v4

s3-presign

A minimal library for generating presigned URLs for Amazon S3 compatible services

3 releases

0.0.3 Oct 18, 2024
0.0.2 Feb 2, 2023
0.0.1 Jan 15, 2023

#205 in Authentication

Download history 519/week @ 2024-07-18 370/week @ 2024-07-25 261/week @ 2024-08-01 198/week @ 2024-08-08 153/week @ 2024-08-15 150/week @ 2024-08-22 36/week @ 2024-08-29 6/week @ 2024-09-05 21/week @ 2024-09-12 54/week @ 2024-09-19 114/week @ 2024-09-26 36/week @ 2024-10-03 50/week @ 2024-10-10 196/week @ 2024-10-17 155/week @ 2024-10-24 114/week @ 2024-10-31

518 downloads per month

MIT/Apache

20KB
426 lines

s3-presign

Minimal library to get an S3 presign URL.

Usage

use s3_presign::{Credentials, Presigner};

let credentials = Credentials::new(
    "blah.....blah...",
    "blah.....xxxxxxx",
    None,
);

let bucket = "my-bucket";
let region = "us-east-1";

let mut presigner = Presigner::new(credentials, bucket, region);
// presigner.endpoint(endpoint);
let url = self.presigner.url_for_s3_url(path).unwrap();

let signed_url = self.sign_s3_request("HEAD", &url);

let signed_url = self.sign_s3_request("PUT", &url);
let signed_url = self.sign_s3_request("GET", &url);

S3-compatible APIs

If you want to use the presigner with a different service that exposes an S3-compatible API (like Cloudflare R2), you can do so by specifying a root when creating the Presigner/Bucket.

let root = "xxxxx.eu.r2.cloudflarestorage.com";

let bucketObj = Bucket::mew_with_root(bucket, root, root);
let mut preBucket = Presigner::from_bucket(credentials, bucketObj);
preBucket.use_path_style(); // Cloudflare R2 only works with Path-Style!!!

let mut presigner = Presigner::new_with_root(credentials, bucket, region, root);

⚠️ Cloudflare R2

The R2s S3-API requires path style! Therefore, you can not use the global convenience function. Instead you need to create a Presigner and call Presigner::use_path_style(&self) on it.

Dependencies

~3.5–5MB
~84K SLoC