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§
Sourcefn upload<'a>(
&'a self,
game_id: GameId,
mod_id: ModId,
filename: &'a str,
) -> MultipartUploader<'a, Init<'a>>
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?;