解码XML时,base64字符串中的字符无效

时间:2011-05-07 01:49:31

标签: c# asp.net xml base64

我们有一个Winform客户端应用程序正在编写我们编写的Web服务。此客户端应用程序请求XML文件中包含的文档,通常是写入XML文件中base64编码二进制字段的PDF。

客户端成功下载,解码并正确打开99%的文档。

但是,当客户端进行此调用时,我们已经开始遇到一些失败的文件:

 byte[] buffer = Convert.FromBase64String(xNode["fileIMAGE"].InnerText);

System.FormatException -

Message="Invalid character in a Base-64 string."
Source="mscorlib"

我们已经将XML文件中的base64 blob写到文本文件中。我没有看到任何“\ 0”字符。我可以发布整个blob,但它非常大。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

已解决的问题

要从服务器流式传输文件,我们使用回调函数来读取/写入文件的块。我们对每个块进行了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流。