Base64 кодирует / декодирует большие файлы в xml .net - PullRequest
1 голос
/ 09 июня 2011

У меня есть внешний веб-сервис, который возвращает файлы в байтовом массиве (маленький, большой файл размером 20 МБ), его необходимо преобразовать в строку base64 и включить в файл XML

Encode

код, который я использовал для преобразования байтового массива в base64:

 Convert.ToBase64String(bytearray, 0, bytearray.Length, _
               Base64FormattingOptions.InsertLineBreaks)

ниже приведена фактическая конструкция xml, которую я использую Linq to XML.

    attachment = From Item In cpd _
      Select New XElement("attachment", _
          New XAttribute("id", Item.UniqueID), _
       New XElement("attachmentDocumentInformation", _
       New XElement("actor", New XAttribute("reference", Item.AttchRefId)), _
       New XElement("documentDescription", _
       New XElement("documentTitle", Item.Document), _
       New XElement("documentType", "A"), _
       New XElement("sequence", Item.Sequence))), _
       New XElement("documentContent", _
         New XAttribute("contentEncoding", "base64"), _
         New XAttribute("id", "DocumentContent" + Item.UniqueID), _
         New XAttribute("mimeType", Item.mimeType), _ 
                 Convert.ToBase64String(Item.Content, 0, Item.Content.Length, _ 
                 Base64FormattingOptions.InsertLineBreaks)))

Decode

и я использую преобразование frombase64 для полученного XML-файла

 Convert.FromBase64String(documentContentinBase64)

работает нормально, когда размер файла меньше, а при преобразовании большого файла возвращается «Такой интерфейс не поддерживается».

У меня два вопроса:

  1. Каков наилучший способ конвертировать большие файлы в tobase64 / frombase64?
  2. после преобразования байтового массива в base64, что является лучшим способом создания XML-файла с документами base64 в нем. У кого-нибудь есть код?

Спасибо

1 Ответ

1 голос
/ 09 июня 2011

Это примерно соответствует вашему документу, просто помассируйте некоторые имена или добавьте атрибуты сериализатора xml, чтобы получить нужный XML-документ:

public class Document
{
    public string Actor { get; set; }
    public string Description { get; set; }
    public string Title { get; set; }
    public string type { get { return "A"; } }
    public int Sequence { get; set; }
    public byte[] Content { get; set; }
}


var d = new Document() { Actor = "Sean Connory", Description = "Thriller", Title = "The Rock" };
d.Content = new byte[] { 43,45,23,43,82,90,34 };

var xmls = new System.Xml.Serialization.XmlSerializer(typeof(Document));
using (var ms = new System.IO.MemoryStream())
{
    xmls.Serialize(ms, d);
    Console.Write(System.Text.Encoding.UTF8.GetString(ms.ToArray()));
}
Console.ReadLine();

XmlSerializer преобразует свойство byte[] (в этомКонтент дела) автоматически в и из base64encoding.Вы искали «лучший» способ конвертировать большие файлы и поместить их в XML-документы.Их могут быть другие (лучшие) способы сделать это.Но я использовал этот путь с большим успехом в прошлом.При правильной настройке это решение может избавить вас от множества проблем, поскольку оно будет создавать для вас документ XML и преобразовывать данные в Base64, если объект настроен правильно.На обратной стороне вы можете взять документ XML и заполнить объект всеми его данными, что сэкономит вам время на навигацию по узлам XML, чтобы найти нужные данные.

Обновление

Если это не работает для больших файлов, как ожидалось, я нашел эту статью MSDN о сериализации потока в поток base64.Я никогда не работал с этим раньше и поэтому не могу дать вам какой-либо отличной идеи, но это больше похоже на то, что вы ищете.

...