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 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, length: Some(obj.size() - resume_at), ..Default::default() }; sdk.download(&mut out, &obj, opts).await?; println!("Resumed from byte: {}", resume_at);