1
1
namespace devanewbot . Api . v0 . Controllers ;
2
2
3
+ using System ;
3
4
using System . IO ;
4
5
using System . IO . Compression ;
5
6
using System . Linq ;
6
7
using System . Net . Http ;
7
- using System . Net . Mime ;
8
8
using System . Threading . Tasks ;
9
9
using Microsoft . AspNetCore . Mvc ;
10
10
using SlackNet ;
@@ -28,16 +28,21 @@ public async Task<IActionResult> Export()
28
28
{
29
29
var emojis = await Client . Emoji . List ( ) ;
30
30
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 ) )
34
32
{
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
+ }
39
43
}
40
44
41
- return File ( memoryStream , "application/zip" , "emoji.zip" ) ;
45
+ memoryStream . Seek ( 0 , SeekOrigin . Begin ) ;
46
+ return File ( memoryStream . ToArray ( ) , "application/zip" , "emoji.zip" ) ;
42
47
}
43
48
}
0 commit comments