我使用以下方法将字节数组写入内存流:
string filename = "C://a.jpg";
byte[] bytes = File.ReadAllBytes(filename);
string str = Convert.ToBase64String(bytes);
adapter.PublishPhoto(Message.Create(new MemoryStream(Convert.FromBase64String(str)), new ContentType("text/plain")), "", "");
现在我正在尝试使用
恢复字节数组var sr = new StreamReader(message.Body.Content); //message.Body.Content refers to the stream that I created.
var str = sr.ReadToEnd();
byte[] bytes = Convert.FromBase64String(str);
但它在运行时抛出此异常:输入不是有效的Base-64字符串,因为它包含非基本64字符,两个以上的填充字符或填充字符中的非法字符。
我该怎么办?
答案 0 :(得分:0)
您提供的第一个代码示例转换为base64 并返回,因此可以简化为以下内容:
string filename = "C://a.jpg";
byte[] bytes = File.ReadAllBytes(filename);
adapter.PublishPhoto(Message.Create(new MemoryStream(bytes), new ContentType("text/plain")), "", "");
也就是说,您在内存流中传递原始JPEG数据,而不是该数据的base64编码版本。您提到第二个代码示例中的message.Body.Content
是包含来自第一个代码示例的所述原始JPEG数据的流。然后,您可以从中获取字节,如下所示:
using (MemoryStream targetStream = new MemoryStream())
{
message.Body.Content.CopyTo(targetStream);
byte[] bytes = targetStream.ToArray();
}
您可能打算在您的流中实际存储base64编码数据,在这种情况下,恢复字节的方法应该有效。为此,请按以下方式修改您的第一个样本:
adapter.PublishPhoto(Message.Create(new MemoryStream(Encoding.UTF8.GetBytes(str)), new ContentType("text/plain")), "", "");