```rust use error_chain::error_chain; use std::io::copy; use std::fs::File; use tempfile::Builder; use std::io::Cursor; error_chain! { foreign_links { Io(std::io::Error); HttpRequest(reqwest::Error); } } #[tokio::main] async fn main() -> Result<()> { let tmp_dir = Builder::new().prefix("example").tempdir()?; let target = "https://www.rust-lang.org/logos/rust-logo-512x512.png"; let response = reqwest::get(target).await?; let mut dest = { let fname = response .url() .path_segments() .and_then(|segments| segments.last()) .and_then(|name| if name.is_empty() { None } else { Some(name) }) .unwrap_or("tmp.bin"); println!("file to download: '{}'", fname); // let fname = tmp_dir.path().join(fname); ! this line is commented out as temp files are removed on exit. // This will download the file in cwd, so we can verify the content. println!("will be located under: '{:?}'", fname); File::create(fname)? }; // let content = response.text().await?; // copy(&mut content.as_bytes(), &mut dest)?; let mut content = Cursor::new(response.bytes().await?); copy(&mut content, &mut dest)?; Ok(()) } ``` The [Official Cook Book Sample Code](https://rust-lang-nursery.github.io/rust-cookbook/web/clients/download.html) is wrong. Doesn't work. Instead of using `.text()`, use `.bytes()` and wrapped with `Cursor`. `Cursor` is the main point. An experienced developer (but beginner in Rust) knows that converting binary file content to text then bytes is dangerous, due to encoding issue; but wouldn't know about `Cursor`. ## Error Explained `std::io::Read` requires `Read`, which `Bytes` doesn't have. So `Cursor` is needed. Weird design for developer from another language. ``` the trait bound `bytes::bytes::Bytes: std::io::Read` is not satisfied the trait `std::io::Read` is not implemented for `bytes::bytes::Bytes main.rs(37, 5): required by a bound introduced by this call copy.rs(55, 8): required by a bound in `std::io::copy` No quick fixes available ``` ## Reference - https://rust-lang-nursery.github.io/rust-cookbook/web/clients/download.html - https://stackoverflow.com/questions/75122895/download-image-with-rust-fails-image-corrupted/75123176#75123176