Base64在xml .net中编码/解码大文件

时间:2011-06-09 16:28:20

标签: .net base64 decode encode

我有一个外部web服务,它返回字节数组中的文件(小的,大的20Mb文件),它必须转换为base64字符串并包含在XML文件中

编码

我用来将字节数组转换为base64的代码是

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

以下是我使用Linq to XML的实际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)))

解码

我使用frombase64转换来获取收到的xml文件

 Convert.FromBase64String(documentContentinBase64)

当文件较小时,它可以正常工作,当大文件转换返回“不支持此类接口”时。

我有两个问题:

  1. 转换大文件tobase64 / frombase64的最佳方法是什么?
  2. 将字节数组转换为base64后,构建包含base64文档的xml文件的最佳方法是什么。有没有人有一些代码?
  3. 由于

1 个答案:

答案 0 :(得分:1)

这大致遵循您的文档,简单按摩一些名称,或添加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[]属性(在本例中为Content)转换为base64encoding。您正在寻找转换大文件并将其放入xml文档的“最佳”方法。他们是我的其他(更好)的方式。但是我过去曾以这种方式取得了很大的成功。如果设置正确,这个解决方案可以为您节省很多麻烦,因为它将为您构建xml文档,并在正确设置对象时将数据转换为Base64。在反面,您可以获取xml文档并使用其所有数据填充对象,这样可以节省导航xml节点以查找所需数据的时间。

<强>更新

如果这对大文件不起作用,我确实发现this MSDN article将流序列化为base64流。我以前从未使用过这个,所以不能为你提供任何有用的见解,但听起来更像你正在寻找的东西。