upload_reader/
upload_reader.rs1use 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}