11namespace devanewbot . Api . v0 . Controllers ;
22
3+ using System ;
34using System . IO ;
45using System . IO . Compression ;
56using System . Linq ;
67using System . Net . Http ;
7- using System . Net . Mime ;
88using System . Threading . Tasks ;
99using Microsoft . AspNetCore . Mvc ;
1010using SlackNet ;
@@ -28,16 +28,21 @@ public async Task<IActionResult> Export()
2828 {
2929 var emojis = await Client . Emoji . List ( ) ;
3030 using var memoryStream = new MemoryStream ( ) ;
31- using var archive = new ZipArchive ( memoryStream ) ;
32- using var httpClient = HttpClientFactory . CreateClient ( ) ;
33- foreach ( var emoji in emojis . Where ( e => ! e . Value . StartsWith ( "alias:" ) ) )
31+ using ( var archive = new ZipArchive ( memoryStream , ZipArchiveMode . Create , true ) )
3432 {
35- var response = await httpClient . GetStreamAsync ( emoji . Value ) ;
36- var entry = archive . CreateEntry ( $ "{ emoji . Key } .png") ;
37- var entryStream = entry . Open ( ) ;
38- await response . CopyToAsync ( entryStream ) ;
33+ using var httpClient = HttpClientFactory . CreateClient ( ) ;
34+ foreach ( var emoji in emojis . Where ( e => ! e . Value . StartsWith ( "alias:" ) ) )
35+ {
36+ var response = await httpClient . GetStreamAsync ( emoji . Value ) ;
37+ var uri = new Uri ( emoji . Value ) ;
38+ var fileExtension = Path . GetExtension ( uri . AbsolutePath ) ;
39+ var entry = archive . CreateEntry ( $ "{ emoji . Key } { fileExtension } ") ;
40+ using var entryStream = entry . Open ( ) ;
41+ await response . CopyToAsync ( entryStream ) ;
42+ }
3943 }
4044
41- return File ( memoryStream , "application/zip" , "emoji.zip" ) ;
45+ memoryStream . Seek ( 0 , SeekOrigin . Begin ) ;
46+ return File ( memoryStream . ToArray ( ) , "application/zip" , "emoji.zip" ) ;
4247 }
4348}
0 commit comments