77using System . Net . Mime ;
88using System . Net . NetworkInformation ;
99using System . Net . Sockets ;
10+ using System . Text ;
1011using System . Text . Json ;
1112using System . Text . Json . Serialization ;
1213using EmptyFiles ;
14+ using HttpMultipartParser ;
1315using Kantan . Net ;
1416using Kantan . Net . Utilities ;
1517using Novus . Streams ;
1618using SmartImage . Lib . Images ;
19+ using SmartImage . Lib . Images . Uni ;
1720using SmartImage . Lib . Results ;
1821using SmartImage . Lib . Utilities ;
1922
@@ -64,6 +67,7 @@ public SearchServer(SearchClient client, int port)
6467
6568
6669 private async Task < object > HandleRequestAsync ( HttpListenerRequest request , HttpListenerResponse response )
70+
6771 {
6872 object ok ;
6973
@@ -74,24 +78,61 @@ private async Task<object> HandleRequestAsync(HttpListenerRequest request, HttpL
7478 var ct = request . Headers . Get ( "Content-Type" ) ;
7579 Debug . WriteLine ( $ "{ ct } ") ;
7680
77- switch ( ct ) {
81+ /*byte[] buf;
82+
83+ using var memoryStream = new MemoryStream();
84+ await request.InputStream.CopyToAsync(memoryStream);
85+ buf = memoryStream.ToArray();
86+
87+ memoryStream.TrySeek();
88+ Debug.WriteLine($"read {memoryStream.Length}");*/
89+
90+ SearchQuery sq ;
91+ object sqInput = null ;
92+
93+ var mthv = MediaTypeHeaderValue . Parse ( ct ) ;
94+ using var sc = new StreamContent ( request . InputStream ) ;
95+
96+ var mpfd = await MultipartFormDataParser . ParseAsync ( request . InputStream ) ;
97+
98+ // var parser = new StreamingMultipartFormDataParser(request.InputStream);
99+ // byte[] buf1 = null;
100+ // FileStream fs = new FileStream(Path.GetTempFileName(), FileMode.CreateNew);
101+
102+ /*parser.FileHandler += (name, fileName, type, disposition, buffer, bytes, number, properties) =>
103+ {
104+ // buf1 = buffer;
105+ // buffer.CopyTo(buf1,0);
106+ fs.Write(buffer, 0, bytes);
107+ };*/
108+
109+ switch ( mthv . MediaType ) {
78110 case MediaTypeNames . Text . Plain :
79- break ;
111+ goto default ;
80112
81113 case MediaTypeNames . Image . Bmp :
82114 break ;
83115
116+ case MediaTypeNames . Multipart . FormData :
117+ // sqInput = mpfd.Files[0].Data;
118+
119+ // await parser.RunAsync();
120+
121+ // sqInput = buf1;
122+ // sqInput = fs;
123+
124+ var file = mpfd . Files . First ( ) ;
125+ string filename = file . FileName ;
126+ Stream data = file . Data ;
127+ sqInput = data ;
128+
129+ break ;
130+
84131 default :
132+ sqInput = await sc . ReadAsStringAsync ( ) ;
85133 break ;
86134 }
87135
88- using var memoryStream = new MemoryStream ( ) ;
89- await request . InputStream . CopyToAsync ( memoryStream ) ;
90- var buf = memoryStream . ToArray ( ) ;
91-
92- memoryStream . TrySeek ( ) ;
93- Debug . WriteLine ( $ "read { memoryStream . Length } ") ;
94-
95136 /*var sz = await request.ReadRequestStringAsync();
96137
97138 if (String.IsNullOrWhiteSpace(sz)) {
@@ -100,7 +141,7 @@ private async Task<object> HandleRequestAsync(HttpListenerRequest request, HttpL
100141
101142 Debug.WriteLine($"{sz}");*/
102143
103- var sq = await SearchQuery . TryCreateAsync ( memoryStream ) ;
144+ sq = await SearchQuery . TryCreateAsync ( sqInput ) ;
104145
105146 if ( sq == SearchQuery . Null ) {
106147 srvResponse . Message = R1 . Err_Query ;
0 commit comments