Неверный символ в строке base64 при декодировании XML - PullRequest
2 голосов
/ 07 мая 2011

У нас есть клиентское приложение Winform, которое использует веб-сервис, который мы пишем. Это клиентское приложение запрашивает документы, содержащиеся в файлах XML, обычно это PDF, записанный в двоичное поле в кодировке base64 в файле XML.

Клиент успешно загружает, декодирует и открывает 99% документов правильно.

Однако, мы начали сталкиваться с некоторыми файлами, которые терпят неудачу, когда клиент делает этот вызов:

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

System.FormatException-

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

Мы записали двоичный объект base64 из XML-файла в текстовый файл. Я не вижу символов "\ 0". Я мог бы опубликовать весь блоб, но он довольно большой.

Есть идеи?

1 Ответ

1 голос
/ 09 мая 2011

Проблема решена

Для потоковой передачи файла с сервера мы используем функцию обратного вызова для чтения / записи фрагментов файла. Мы были base64encoding каждый кусок. НЕПРАВИЛЬНО.

Resolution - записать все чанки в глобальный объект потока памяти. В конце обратных вызовов выполните кодировку 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, отправляемого клиентскому приложению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...