pub struct GridFsUploadStream { /* private fields */ }
Expand description

A stream to which bytes can be written to be uploaded to a GridFS bucket.

Uploading to the Stream

The GridFsUploadStream type implements futures_io::AsyncWrite. It is recommended that users call the utility methods in AsyncWriteExt to interact with the stream.

Bytes can be written to the stream using the write methods in AsyncWriteExt. When close is invoked on the stream, any remaining bytes in the buffer are written to the chunks collection and a corresponding FilesCollectionDocument is written to the files collection. It is an error to write to, abort, or close the stream after close has been called.

use futures_util::io::AsyncWriteExt;

let bytes = vec![0u8; 100];
let mut upload_stream = bucket.open_upload_stream("example_file", None);
upload_stream.write_all(&bytes[..]).await?;
upload_stream.close().await?;

Aborting the Stream

A stream can be aborted by calling the abort method. This will remove any chunks associated with the stream from the chunks collection. It is an error to write to, abort, or close the stream after abort has been called.

use futures_util::io::AsyncWriteExt;

let bytes = vec![0u8; 100];
let mut upload_stream = bucket.open_upload_stream("example_file", None);
upload_stream.write_all(&bytes[..]).await?;
upload_stream.abort().await?;

In the event of an error during any operation on the GridFsUploadStream, any chunks associated with the stream will be removed from the chunks collection. Any subsequent attempts to write to, abort, or close the stream will return an error.

If a GridFsUploadStream is dropped prior to abort or close being called, its Drop implementation will spawn a task to remove any chunks associated with the stream from the chunks collection. Users should prefer calling abort explicitly to relying on the Drop implementation in order to await the task and inspect the result of the delete operation.

Flushing the Stream

Because all chunks besides the final chunk of a file must be exactly chunk_size_bytes, calling flush is not guaranteed to flush all bytes to the chunks collection. Any remaining buffered bytes will be written to the chunks collection upon a call to close.

Using tokio::io::AsyncWrite

Users who prefer to use tokio’s AsyncWrite trait can use the tokio_util::compat module.

use tokio_util::compat::FuturesAsyncWriteCompatExt;

let futures_upload_stream = bucket.open_upload_stream("example_file", None);
let tokio_upload_stream = futures_upload_stream.compat_write();

Implementations§

source§

impl GridFsUploadStream

source

pub fn id(&self) -> &Bson

Gets the stream’s unique Bson identifier. This value will be the id field for the FilesCollectionDocument uploaded to the files collection when the stream is closed.

source

pub async fn abort(&mut self) -> Result<()>

Aborts the stream, discarding any chunks that have already been written to the chunks collection. Once this method has been called, it is an error to attempt to write to, abort, or close the stream.

Trait Implementations§

source§

impl AsyncWrite for GridFsUploadStream

source§

fn poll_write(
    self: Pin<&mut Self>,
    cx: &mut Context<'_>,
    buf: &[u8]
) -> Poll<Result<usize, Error>>

Attempt to write bytes from buf into the object. Read more
source§

fn poll_flush(self: Pin<&mut Self>, _cx: &mut Context<'_>) -> Poll<Result<()>>

Attempt to flush the object, ensuring that any buffered data reach their destination. Read more
source§

fn poll_close(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Result<()>>

Attempt to close the object. Read more
source§

fn poll_write_vectored(
    self: Pin<&mut Self>,
    cx: &mut Context<'_>,
    bufs: &[IoSlice<'_>]
) -> Poll<Result<usize, Error>>

Attempt to write bytes from bufs into the object using vectored IO operations. Read more
source§

impl Drop for GridFsUploadStream

source§

fn drop(&mut self)

Executes the destructor for this type. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

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

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<W> AsyncWriteExt for Wwhere
    W: AsyncWrite + ?Sized,

source§

fn flush(&mut self) -> Flush<'_, Self>where
    Self: Unpin,

Creates a future which will entirely flush this AsyncWrite. Read more
source§

fn close(&mut self) -> Close<'_, Self>where
    Self: Unpin,

Creates a future which will entirely close this AsyncWrite.
source§

fn write<'a>(&'a mut self, buf: &'a [u8]) -> Write<'a, Self>where
    Self: Unpin,

Creates a future which will write bytes from buf into the object. Read more
source§

fn write_vectored<'a>(
    &'a mut self,
    bufs: &'a [IoSlice<'a>]
) -> WriteVectored<'a, Self>where
    Self: Unpin,

Creates a future which will write bytes from bufs into the object using vectored IO operations. Read more
source§

fn write_all<'a>(&'a mut self, buf: &'a [u8]) -> WriteAll<'a, Self>where
    Self: Unpin,

Write data into this object. Read more
source§

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

const: unstable · source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

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

const: unstable · source§

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

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

const: unstable · source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> FuturesAsyncWriteCompatExt for Twhere
    T: AsyncWrite,

source§

fn compat_write(self) -> Compat<Self>where
    Self: Sized,

Wraps self with a compatibility layer that implements tokio::io::AsyncWrite.
source§

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

const: unstable · 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<T> for T

§

type Output = T

Should always be Self
source§

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

§

type Error = Infallible

The type returned in the event of a conversion error.
const: unstable · source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

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

§

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

The type returned in the event of a conversion error.
const: unstable · source§

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

Performs the conversion.
§

impl<V, T> VZip<V> for Twhere
    V: MultiLane<T>,

§

fn vzip(self) -> V