@@ -339,59 +339,106 @@ async fn reduce_webp_size() -> anyhow::Result<()> {
339
339
}
340
340
341
341
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 ( ) ? {
345
346
let file = file?;
346
347
let path = file. path ( ) ;
347
348
if path. is_file ( ) && path. extension ( ) . and_then ( |s| s. to_str ( ) ) == Some ( "jpg" ) {
348
349
let file = File :: open ( & path) . await ?;
349
350
let mut reader = BufReader :: new ( file) ;
350
351
let mut buf = Vec :: new ( ) ;
351
352
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
+ }
365
382
}
366
383
}
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 ( ) ? {
370
390
let file = file?;
371
391
let path = file. path ( ) ;
372
392
if path. is_file ( ) && path. extension ( ) . and_then ( |s| s. to_str ( ) ) == Some ( "webp" ) {
373
393
let file = File :: open ( & path) . await ?;
374
394
let mut reader = BufReader :: new ( file) ;
375
395
let mut buf = Vec :: new ( ) ;
376
396
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
+ }
390
431
}
391
432
}
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}" ) ;
393
435
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
395
442
}
396
443
397
444
async fn get_temp_files ( backend_url : & str , backend_token : & str ) -> anyhow:: Result < ApiResult > {
0 commit comments