Skip to main content

S3Storage

Struct S3Storage 

Source
pub struct S3Storage { /* private fields */ }

Implementations§

Source§

impl S3Storage

Source

pub fn new(config: S3Config) -> Self

Source

pub fn with_client(config: S3Config, client: Client) -> Self

Use a prepared client — how a test drives this against a fake.

Source

pub fn config(&self) -> &S3Config

Source§

impl S3Storage

Source

pub fn presigned_put(&self, key: &str, expires: Duration) -> Result<String>

A URL a browser can PUT a file to directly.

This is how a large upload should reach the bucket. A video that passes through the application costs the server the whole file in memory and the transfer twice. The server issues this URL, the browser uploads, and the server is told the key afterwards — it never holds a byte. For anything over a few hundred megabytes, use S3Storage::create_multipart instead, so a dropped connection costs one part rather than the whole file.

The browser may send any headers it likes; only the host is signed.

Source

pub fn presigned_get(&self, key: &str, expires: Duration) -> Result<String>

A URL that reads a private object for a while, for handing a visitor a download without making the object public.

Source

pub async fn create_multipart(&self, key: &str) -> Result<Multipart>

Begin a multipart upload. Returns the id every part must carry.

Source

pub fn presigned_part( &self, upload: &Multipart, number: u32, expires: Duration, ) -> Result<String>

A URL the browser PUTs one part to. Parts are numbered from 1, every part but the last must be at least MIN_PART_BYTES, and there may be at most MAX_PARTS. The ETag header of the response is what S3Storage::complete_multipart needs back.

Source

pub async fn complete_multipart( &self, upload: &Multipart, parts: Vec<Part>, ) -> Result<()>

Join the parts into the object. parts in any order; they are joined by number.

Source

pub async fn abort_multipart(&self, upload: &Multipart) -> Result<()>

Give up on a multipart upload, freeing the parts already stored.

Call it when the browser goes away. Parts of an abandoned upload are billed until this is called or a lifecycle rule removes them.

Source

pub async fn expire_after(&self, prefix: &str, days: u32) -> Result<()>

Tell the bucket to delete objects under prefix after days, and to clean up multipart uploads nobody finished after the same time.

This replaces the bucket’s whole lifecycle configuration. A bucket has one, and S3 has no way to add a rule without sending the rest. If somebody has configured rules in the console, this overwrites them — which is why the prefix is required rather than defaulting to everything.

Trait Implementations§

Source§

impl Storage for S3Storage

Source§

async fn put(&self, path: &str, contents: Vec<u8>) -> Result<()>

Source§

async fn put_with( &self, path: &str, contents: Vec<u8>, visibility: Visibility, ) -> Result<()>

Source§

async fn get(&self, path: &str) -> Result<Vec<u8>>

Source§

async fn exists(&self, path: &str) -> Result<bool>

Source§

async fn delete(&self, path: &str) -> Result<()>

Source§

async fn size(&self, path: &str) -> Result<u64>

Source§

async fn list(&self, prefix: &str) -> Result<Vec<Entry>>

Everything directly under a prefix.
Source§

fn url(&self, path: &str) -> Option<String>

A URL a browser can fetch, when the driver can produce one.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.