SiaSia Developer Portal

Resume a Download

Measure how many bytes you already have, reopen the destination in append mode, and request only the remaining byte range.

rust
use std::io; use sia_storage::DownloadOptions; let output_path = "output.bin"; let resume_at = match tokio::fs::metadata(output_path).await { Ok(metadata) => metadata.len(), Err(err) if err.kind() == io::ErrorKind::NotFound => 0, Err(err) => return Err(err.into()), }; if resume_at >= obj.size() { println!("Download already complete."); return Ok(()); } let mut out = tokio::fs::OpenOptions::new() .create(true) .append(true) .open(output_path) .await?; let opts = DownloadOptions { offset: resume_at, ..Default::default() }; let mut reader = sdk.download(&obj, opts)?; tokio::io::copy(&mut reader, &mut out).await?; println!("Resumed from byte: {}", resume_at);