解码XML时base64字符串中的字符无效
问题描述:
我们有一个Winform客户端应用程序,它可以包含我们编写的Web服务。此客户端应用程序请求包含在XML文件中的文档,通常是将PDF写入XML文件中的base64编码二进制字段。解码XML时base64字符串中的字符无效
客户端正确下载,解码并打开99%的文档。
但是,我们已经开始遇到一些是失败文件的客户机进行此调用时:
byte[] buffer = Convert.FromBase64String(xNode["fileIMAGE"].InnerText);
System.FormatException-
Message="Invalid character in a Base-64 string."
Source="mscorlib"
我们从写出来的base64 BLOB将XML文件转换为文本文件。我没有看到任何“\ 0”字符。我可以发布整个blob,但它非常大。
任何想法?
答
解决的问题
要流从服务器上的文件,我们使用一个回调函数来读取文件/写入块。我们base64编码每个块。错误。
解决方案 - 将所有块写入全局内存流对象。在回调结束时,然后执行base64编码。
在回调函数:
if (brData.ChunkNo == 1)
{
// Set the Content-type of the file
if (brData.MimeType.Length < 1)
{
mimeType = "application/unknown";
}
else
{
mimeType = brData.MimeType;
}
msbase64Out = new MemoryStream();
}
if (brData.bytesJustRead > 0)
{
fileMS.WriteTo(msbase64Out);
}
if (brData.bytesRemaining < 1)
{
byte[] imgBytes = msbase64Out.ToArray();
string img64 = Convert.ToBase64String(imgBytes);
viewdocWriter.WriteString(img64);
}
msbase64Out是被写入每个回调被调用时到全局内存流。 viewdocWriter是一个全局XML编写器,负责编写发送到客户端应用程序的XML流。
你有可能添加一些代码来报告所有不在'isalnum()','+'或'/'中的字符吗?这应该会留下一大堆新行或新纪元或类似的东西,最后的填充以及你的神秘性格。 – sarnold 2011-05-07 02:03:37
我坐在这里写一个测试应用程序来解析结果字符来测试这件事情。尝试实现这里提供的解决方案http://stackoverflow.com/questions/3355407/validate-string-is-base64-format-using-regex – paparush 2011-05-07 02:09:42
在base64 blob的主体中有=(等号)。我不认为这是一个有效的base64字符(A-Z a-z 0-9 + /),而不是在最后填充。 – paparush 2011-05-07 03:13:56