@@ -339,59 +339,106 @@ async fn reduce_webp_size() -> anyhow::Result<()> {
339339}
340340
341341async 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
397444async fn get_temp_files ( backend_url : & str , backend_token : & str ) -> anyhow:: Result < ApiResult > {
0 commit comments