mirror of
https://github.com/flibusta-apps/books_downloader.git
synced 2025-12-06 15:05:37 +01:00
40 lines
882 B
Rust
40 lines
882 B
Rust
use reqwest::Response;
|
|
use tempfile::SpooledTempFile;
|
|
use bytes::Buf;
|
|
|
|
|
|
use std::io::{Seek, SeekFrom, Write};
|
|
|
|
|
|
pub async fn response_to_tempfile(res: &mut Response) -> Option<(SpooledTempFile, usize)> {
|
|
let mut tmp_file = tempfile::spooled_tempfile(5 * 1024 * 1024);
|
|
|
|
let mut data_size: usize = 0;
|
|
|
|
{
|
|
loop {
|
|
let chunk = res.chunk().await;
|
|
|
|
let result = match chunk {
|
|
Ok(v) => v,
|
|
Err(_) => return None,
|
|
};
|
|
|
|
let data = match result {
|
|
Some(v) => v,
|
|
None => break,
|
|
};
|
|
|
|
data_size += data.len();
|
|
|
|
match tmp_file.write(data.chunk()) {
|
|
Ok(_) => (),
|
|
Err(_) => return None,
|
|
}
|
|
}
|
|
|
|
tmp_file.seek(SeekFrom::Start(0)).unwrap();
|
|
}
|
|
|
|
Some((tmp_file, data_size))
|
|
} |