diff --git a/src/Discord.Net.Rest/Serialization/Json/Converters/ImagePropertyConverter.cs b/src/Discord.Net.Rest/Serialization/Json/Converters/ImagePropertyConverter.cs index 0619119f3..67b009e31 100644 --- a/src/Discord.Net.Rest/Serialization/Json/Converters/ImagePropertyConverter.cs +++ b/src/Discord.Net.Rest/Serialization/Json/Converters/ImagePropertyConverter.cs @@ -1,4 +1,5 @@ using System; +using System.IO; using System.Text.Json; namespace Discord.Serialization.Json.Converters @@ -18,24 +19,28 @@ namespace Discord.Serialization.Json.Converters string str; if (value.Stream != null) { - byte[] bytes = new byte[value.Stream.Length - value.Stream.Position]; - value.Stream.Read(bytes, 0, bytes.Length); + byte[] bytes; + int length; + if (value.Stream.CanSeek) + { + bytes = new byte[value.Stream.Length - value.Stream.Position]; + length = value.Stream.Read(bytes, 0, bytes.Length); + } + else + { + var tempStream = new MemoryStream(); + value.Stream.CopyTo(tempStream); + bytes = tempStream.GetBuffer(); + length = (int)tempStream.Length; + } - string base64 = Convert.ToBase64String(bytes); + string base64 = Convert.ToBase64String(bytes, 0, length); switch (value.StreamFormat) { - case ImageFormat.Jpeg: - str = $"data:image/jpeg;base64,{base64}"; - break; - case ImageFormat.Png: - str = $"data:image/png;base64,{base64}"; - break; - case ImageFormat.Gif: - str = $"data:image/gif;base64,{base64}"; - break; - case ImageFormat.WebP: - str = $"data:image/webp;base64,{base64}"; - break; + case ImageFormat.Jpeg: str = $"data:image/jpeg;base64,{base64}"; break; + case ImageFormat.Png: str = $"data:image/png;base64,{base64}"; break; + case ImageFormat.Gif: str = $"data:image/gif;base64,{base64}"; break; + case ImageFormat.WebP: str = $"data:image/webp;base64,{base64}"; break; default: throw new SerializationException($"Unable to serialize an {nameof(Image)} with a format of {value.StreamFormat}"); }