C# - Безопасный Base64 как Gif, когда webRequest отправляет XML?

Я отправил WebRequest и получил в качестве ответа строку с кодом XML в моем контенте.

        WebRequest request = WebRequest.Create("...");
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        Stream dataStream = response.GetResponseStream();
        StreamReader reader = new StreamReader(dataStream);
        string responseFromServer = reader.ReadToEnd();

        byte[] bytes = Convert.FromBase64String(responseFromServer);

        Image image;
        using (MemoryStream ms = new MemoryStream(bytes))
        {
            image = Image.FromStream(ms);
        }

        image.Save("File", System.Drawing.Imaging.ImageFormat.Gif);

Проблема в том, что "Convert.FromBase64String(responseFromServer)" не может преобразоваться в base 64, потому что ответ:

       "<string xmlns="*LINK*"> 'content' </string>"

Могу ли я удалить эти теги или скопировать содержимое?

Я надеюсь, у вас есть моя проблема:) Спасибо за помощь и извините за плохой английский х)

2 ответа

Решение

Я бы порекомендовал использовать XmlReader за это.

WebRequest request = WebRequest.Create("...");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream dataStream = response.GetResponseStream();
//StreamReader reader = new StreamReader(dataStream);
//string responseFromServer = reader.ReadToEnd();

//byte[] bytes = Convert.FromBase64String(responseFromServer);

using (var reader = XmlReader.Create(dataStream))
{
    reader.Read();
    reader.Read();
    string base64 = reader.Value;
    byte[] bytes = Convert.FromBase64String(base64);
    Image image;
    using (MemoryStream ms = new MemoryStream(bytes))
    {
        image = Image.FromStream(ms);
        image.Save("File", System.Drawing.Imaging.ImageFormat.Gif);
    }
}

Существует метод для преобразования из Base64 в значение элемента напрямую, но вам нужно знать вещи, которые более или менее требуют, чтобы вы все равно читали весь ваш поток (вы можете посмотреть историю изменений, чтобы увидеть, как я работаю через тот;).

Вы можете использовать XmlDocument..

        WebRequest request = WebRequest.Create("...");
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        Stream dataStream = response.GetResponseStream();
        StreamReader reader = new StreamReader(dataStream);
        XmlDocument doc = new XmlDocument();
        doc.Load(reader);
        byte[] bytes = Convert.FromBase64String(doc.GetElementsByTagName("string")[0].InnerText);

        System.Drawing.Image image;
        using (MemoryStream ms = new MemoryStream(bytes))
        {
            image = System.Drawing.Image.FromStream(ms);
        }
Другие вопросы по тегам