Skip to content

Commit 9d57624

Browse files
committed
feat: add retry features for uploading files
1 parent 27190d8 commit 9d57624

File tree

1 file changed

+81
-34
lines changed

1 file changed

+81
-34
lines changed

check-cmt/src/main.rs

Lines changed: 81 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -339,59 +339,106 @@ async fn reduce_webp_size() -> anyhow::Result<()> {
339339
}
340340

341341
async fn upload_files(s3_client: &S3Client, bucket: String) -> anyhow::Result<()> {
342-
let dir = Path::new("./tmp2");
343-
println!("Uploading jpg files: {:#?}", dir.read_dir()?.count());
344-
for file in dir.read_dir()? {
342+
let jpg_dir = Path::new("./tmp2");
343+
println!("Uploading jpg files: {:#?}", jpg_dir.read_dir()?.count());
344+
let mut jpg_success = 0;
345+
for file in jpg_dir.read_dir()? {
345346
let file = file?;
346347
let path = file.path();
347348
if path.is_file() && path.extension().and_then(|s| s.to_str()) == Some("jpg") {
348349
let file = File::open(&path).await?;
349350
let mut reader = BufReader::new(file);
350351
let mut buf = Vec::new();
351352
reader.read_to_end(&mut buf).await?;
352-
let request = rusoto_s3::PutObjectRequest {
353-
bucket: bucket.clone(),
354-
key: path
355-
.file_name()
356-
.unwrap()
357-
.to_string_lossy()
358-
.as_ref()
359-
.to_string(),
360-
body: Some(buf.into()),
361-
content_type: Some("image/jpeg".to_string()),
362-
..Default::default()
363-
};
364-
s3_client.put_object(request).await?;
353+
let file_name = path
354+
.file_name()
355+
.unwrap()
356+
.to_string_lossy()
357+
.as_ref()
358+
.to_string();
359+
let mut retry = 3;
360+
while let Err(e) = s3_client
361+
.put_object(rusoto_s3::PutObjectRequest {
362+
bucket: bucket.clone(),
363+
key: file_name.clone(),
364+
body: Some(buf.clone().into()),
365+
content_type: Some("image/jpeg".to_string()),
366+
..Default::default()
367+
})
368+
.await
369+
{
370+
retry -= 1;
371+
if retry <= 0 {
372+
break;
373+
}
374+
println!("{file_name}: 上传失败: {e},剩余重试次数: {retry}")
375+
}
376+
if retry <= 0 {
377+
println!("{file_name}: 上传失败!跳过此文件")
378+
} else {
379+
println!("{file_name}: 上传成功!");
380+
jpg_success += 1;
381+
}
365382
}
366383
}
367-
let dir = Path::new("./tmp3");
368-
println!("Uploading webp files: {:#?}", dir.read_dir()?.count());
369-
for file in dir.read_dir()? {
384+
let jpg_failed = jpg_dir.read_dir()?.count() - jpg_success;
385+
println!("Jpg files uploaded, success: {jpg_success}, failed: {jpg_failed}",);
386+
let webp_dir = Path::new("./tmp3");
387+
println!("Uploading webp files: {:#?}", webp_dir.read_dir()?.count());
388+
let mut webp_success = 0;
389+
for file in webp_dir.read_dir()? {
370390
let file = file?;
371391
let path = file.path();
372392
if path.is_file() && path.extension().and_then(|s| s.to_str()) == Some("webp") {
373393
let file = File::open(&path).await?;
374394
let mut reader = BufReader::new(file);
375395
let mut buf = Vec::new();
376396
reader.read_to_end(&mut buf).await?;
377-
let request = rusoto_s3::PutObjectRequest {
378-
bucket: bucket.clone(),
379-
key: path
380-
.file_name()
381-
.unwrap()
382-
.to_string_lossy()
383-
.as_ref()
384-
.to_string(),
385-
body: Some(buf.into()),
386-
content_type: Some("image/webp".to_string()),
387-
..Default::default()
388-
};
389-
s3_client.put_object(request).await?;
397+
let file_name = path
398+
.file_name()
399+
.unwrap()
400+
.to_string_lossy()
401+
.as_ref()
402+
.to_string();
403+
let mut retry = 3;
404+
while let Err(e) = s3_client
405+
.put_object(rusoto_s3::PutObjectRequest {
406+
bucket: bucket.clone(),
407+
key: path
408+
.file_name()
409+
.unwrap()
410+
.to_string_lossy()
411+
.as_ref()
412+
.to_string(),
413+
body: Some(buf.clone().into()),
414+
content_type: Some("image/webp".to_string()),
415+
..Default::default()
416+
})
417+
.await
418+
{
419+
retry -= 1;
420+
if retry <= 0 {
421+
break;
422+
}
423+
println!("{file_name}: 上传失败: {e},剩余重试次数: {retry}")
424+
}
425+
if retry <= 0 {
426+
println!("{file_name}: 上传失败!跳过此文件")
427+
} else {
428+
println!("{file_name}: 上传成功!");
429+
webp_success += 1;
430+
}
390431
}
391432
}
392-
//Upload files
433+
let webp_failed = webp_dir.read_dir()?.count() - webp_success;
434+
println!("WebP files uploaded, success: {webp_success}, failed: {webp_failed}");
393435
println!("Files uploaded");
394-
Ok(())
436+
if !jpg_failed == 0 || !webp_failed == 0 {
437+
Err(anyhow::anyhow!("Upload files failed"))
438+
} else {
439+
Ok(())
440+
}
441+
//Upload files
395442
}
396443

397444
async fn get_temp_files(backend_url: &str, backend_token: &str) -> anyhow::Result<ApiResult> {

0 commit comments

Comments
 (0)