77using Flurl . Http . Configuration ;
88using Flurl . Http . Content ;
99using Kantan . Net . Utilities ;
10+ using Microsoft . Extensions . Http . Logging ;
11+ using Microsoft . Extensions . Logging ;
1012using Novus . OS ;
1113using Novus . Utilities ;
1214using SmartImage . Lib . Results ;
@@ -16,6 +18,7 @@ namespace SmartImage.Lib.Engines.Impl.Upload;
1618
1719public abstract class BaseUploadEngine : IEndpoint
1820{
21+
1922 /// <summary>
2023 /// Max file size, in bytes
2124 /// </summary>
@@ -39,6 +42,35 @@ protected BaseUploadEngine(string s)
3942
4043 public TimeSpan Timeout { get ; set ; }
4144
45+ protected static readonly ILogger Logger = LogUtil . Factory . CreateLogger ( nameof ( BaseUploadEngine ) ) ;
46+
47+ protected static FlurlClient Client { get ; }
48+
49+ static BaseUploadEngine ( )
50+ {
51+ var handler = new LoggingHttpMessageHandler ( Logger )
52+ {
53+ InnerHandler = new HttpLoggingHandler ( Logger )
54+ {
55+ InnerHandler = new HttpClientHandler ( )
56+ }
57+ } ;
58+
59+ Client = new FlurlClient ( new HttpClient ( handler ) )
60+ {
61+ Settings =
62+ {
63+ Redirects =
64+ {
65+ Enabled = true ,
66+ AllowSecureToInsecure = true ,
67+ ForwardAuthorizationHeader = true ,
68+ MaxAutoRedirects = 20 ,
69+ } ,
70+ }
71+ } ;
72+ }
73+
4274 protected virtual async Task < UploadResult > ProcessResultAsync (
4375 IFlurlResponse response , CancellationToken ct = default )
4476 {
@@ -66,14 +98,15 @@ protected virtual async Task<UploadResult> ProcessResultAsync(
6698 ok = true ;
6799
68100 if ( Paranoid ) {
69- var r2 = await url . WithSettings ( r =>
70- {
71- r . OnError = rx =>
72- {
73- // Debugger.Break();
74- rx . ExceptionHandled = true ;
75- } ;
76- } ) . GetAsync ( cancellationToken : ct ) ;
101+ var r2 = await Client . Request ( url )
102+ . WithSettings ( r =>
103+ {
104+ r . Timeout = Timeout ;
105+ } ) . OnError ( rx =>
106+ {
107+ // Debugger.Break();
108+ rx . ExceptionHandled = true ;
109+ } ) . GetAsync ( cancellationToken : ct ) ;
77110
78111 if ( r2 == null || r2 . GetContentLength ( ) == 0 ) {
79112 ok = false ;
@@ -85,9 +118,9 @@ protected virtual async Task<UploadResult> ProcessResultAsync(
85118
86119 return new ( )
87120 {
88- Url = url ,
89- Size = response . GetContentLength ( ) ,
90- IsValid = ok ,
121+ Url = url ,
122+ Size = response . GetContentLength ( ) ,
123+ IsValid = ok ,
91124 Response = response
92125 } ;
93126 }
@@ -106,33 +139,29 @@ protected void Verify(string file)
106139 public static readonly BaseUploadEngine [ ] All =
107140 ReflectionHelper . CreateAllInAssembly < BaseUploadEngine > ( InheritanceProperties . Subclass ) . ToArray ( ) ;
108141
109- /*public async Task<bool> IsAlive()
110- {
111- using var res = await ((IHttpClient) this).GetEndpointResponseAsync(Timeout);
112-
113- return !res.ResponseMessage.IsSuccessStatusCode;
114- }*/
142+ /*public async Task<bool> IsAlive()
143+ {
144+ using var res = await ((IHttpClient) this).GetEndpointResponseAsync(Timeout);
115145
146+ return !res.ResponseMessage.IsSuccessStatusCode;
147+ }*/
116148 public static BaseUploadEngine Default { get ; set ; } = PomfEngine . Instance ;
117149
118150 public void Dispose ( ) { }
151+
119152}
120153
121154public abstract class BaseCatboxEngine : BaseUploadEngine
122155{
156+
123157 public override async Task < UploadResult > UploadFileAsync ( string file , CancellationToken ct = default )
124158 {
125159 Verify ( file ) ;
126160
127- var response = await EndpointUrl
161+ var response = await Client . Request ( EndpointUrl )
128162 . WithSettings ( r =>
129163 {
130- // r.Timeout = TimeSpan.FromSeconds(10);
131-
132- r . OnError = rx =>
133- {
134- rx . ExceptionHandled = true ;
135- } ;
164+ r . Timeout = Timeout ;
136165 } )
137166 . WithHeaders ( new
138167 {
@@ -150,4 +179,5 @@ public override async Task<UploadResult> UploadFileAsync(string file, Cancellati
150179 }
151180
152181 protected BaseCatboxEngine ( string s ) : base ( s ) { }
182+
153183}
0 commit comments