Skip to main content

upload_reader/
upload_reader.rs

1use baidu_netdisk_sdk::BaiduNetDiskClient;
2use log::info;
3use std::io::BufReader;
4
5#[tokio::main]
6async fn main() -> Result<(), Box<dyn std::error::Error>> {
7    env_logger::init();
8
9    let client = BaiduNetDiskClient::builder().build()?;
10    info!("Client created successfully");
11
12    client.load_token_from_env()?;
13    info!("Token loaded successfully");
14
15    let args: Vec<String> = std::env::args().collect();
16
17    let local_file = if args.len() >= 2 {
18        &args[1]
19    } else {
20        println!("Usage: {} <local_file> [remote_path]", args[0]);
21        println!("Example: {} test.txt /upload/test.txt", args[0]);
22        return Ok(());
23    };
24
25    let remote_path = if args.len() >= 3 {
26        &args[2]
27    } else {
28        "/upload/test_reader.txt"
29    };
30
31    println!("=== Baidu NetDisk Reader Upload ===");
32    println!("Local file: {}", local_file);
33    println!("Remote path: {}", remote_path);
34    println!();
35
36    let file = std::fs::File::open(local_file)?;
37    let metadata = file.metadata()?;
38    let file_size = metadata.len();
39
40    println!("File size: {} bytes", file_size);
41
42    let mut reader = BufReader::new(file);
43
44    let start_time = std::time::Instant::now();
45
46    let response = client
47        .upload()
48        .upload_reader(&mut reader, file_size, remote_path)
49        .await?;
50
51    println!("File uploaded successfully!");
52    println!("  FS ID: {}", response.fs_id);
53    println!("  Server filename: {:?}", response.server_filename);
54    println!("  Path: {}", response.path);
55    println!("  Size: {} bytes", response.size);
56    println!("  Category: {}", response.category);
57    println!("  MD5: {}", response.md5.unwrap_or_default());
58    println!("  Upload time: {:?}", start_time.elapsed());
59
60    Ok(())
61}