MultipartUpload

Trait MultipartUpload 

Source
pub trait MultipartUpload: Sealed {
    // Required methods
    fn upload<'a>(
        &'a self,
        game_id: GameId,
        mod_id: ModId,
        filename: &'a str,
    ) -> MultipartUploader<'a, Init<'a>>;
    fn upload_for(
        &self,
        game_id: GameId,
        mod_id: ModId,
        upload_id: UploadId,
    ) -> MultipartUploader<'_, Started<'_>>;
}
Expand description

Extension trait for uploading files in multiple parts.

Required Methods§

Source

fn upload<'a>( &'a self, game_id: GameId, mod_id: ModId, filename: &'a str, ) -> MultipartUploader<'a, Init<'a>>

Returns MultipartUploader for uploading files in multiple parts.

§Example
use modio::types::id::Id;
use modio::util::upload::{self, ContentRange, MultipartUpload};
use tokio::fs::File;
use tokio::io::{AsyncReadExt, BufReader};
use tokio_util::io::ReaderStream;

let uploader = client
    .upload(Id::new(51), Id::new(1234), "modfile.zip")
    .nonce("xxxxxx") // Max 64 characters (Recommended: SHA-256)
    .await?;

let file = File::open("modfile.zip").await?;
let file_size = file.metadata().await?.len();

for (start, end) in upload::byte_ranges(file_size) {
    let input = BufReader::new(file.try_clone().await?);
    let part = input.take(upload::MULTIPART_FILE_PART_SIZE);
    let stream = ReaderStream::new(part);

    let range = ContentRange {
        start,
        end,
        total: file_size,
    };

    // Add file part to the upload session.
    uploader.add_part(range, stream).await?;
}

// Complete the multipart upload session.
let uploader = uploader.complete().await?;

// Finalize upload to the mod with file details.
uploader.active(true).version("1.0").await?;
Source

fn upload_for( &self, game_id: GameId, mod_id: ModId, upload_id: UploadId, ) -> MultipartUploader<'_, Started<'_>>

Implementors§