XML 中存储图片等二进制文件

作者:vkvi 来源:ITPOW(原创) 日期:2007-12-20

XML 中是可以存储图片等二进制内容,我们也常常这样做,比如我们在进行网站信息交换时,利用一个 XML 就可以实现网站信息及其信息附件的交换。实际图片等二进制不仅可转换存储在 XML 中,也可存储在 TXT 文档中,只是常常应用于 XML,所以这里提到 XML。

XML 肯定是不能直接存储二进制的(至少目前是),存储的是经过转换了的字符串,如下存储的就是一个图片的数据(只截取了部分)。

<?xml version="1.0" encoding="utf-8" ?>
<root>
  <foo><![CDATA[R0lGODlhhwA8AOZ/APp4eBabnNft7vrBwfsTFPH4+SWio/...tKWuvSlMI0pSwMBADs=]]></foo>
</root>

现在就涉及两个问题:将二进制数据转换成字符串,以及将字符串转换成二进制数据。

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        lbl.Text = BinaryFileToBase64String(Server.MapPath("cftea.gif"));
        Base64StringToBinaryFile(Server.MapPath("dest.gif"), lbl.Text);
    }
   
   
    //读取二进制文件数据并将其转换成 Base64 编码返回
    private string BinaryFileToBase64String(string filePath)
    {
        FileStream stream = new FileStream(filePath, FileMode.Open);
        BinaryReader reader = new BinaryReader(stream);
       
        byte[] buffer = new byte[reader.BaseStream.Length];
        reader.Read(buffer, 0, Convert.ToInt32(buffer.Length));
        string base64String = Convert.ToBase64String(buffer);
       
        reader.Close();
        stream.Close();
        stream.Dispose();
       
        return base64String;
    }
   
   
    //将 Base64 编码的字符串转换成二进制并保存为文件
    private void Base64StringToBinaryFile(string filePath, string base64String)
    {
        FileStream stream = new FileStream(filePath, FileMode.Create);
        BinaryWriter writer = new BinaryWriter(stream);
       
        byte[] buffer = new byte[base64String.Length];
        buffer = Convert.FromBase64String(base64String);
        writer.Write(buffer, 0, Convert.ToInt32(buffer.Length));
       
        writer.Close();
        stream.Close();
        stream.Dispose();
    }
}

FileStream、BinaryReader、BinaryWriter 的名称空间是:

System.IO

下载完整的示例包

相关阅读

相关文章