电子公文数据交换的解决方法

本文介绍如何使用Base64编码将二进制文件如图片嵌入到XML文档中,并提供读取方法。适用于公文无纸化传输场景。

 XML在数据交换中的作用越来越大。在公文无纸化传输中,传输的不仅有文本,还有签名、word文件、其他附件等等,如何将这些二进制文件嵌入XML中进行传输,这里以嵌入一个签名图片为例,做简单介绍。

1.将二进制文件以Base64格式写入XML

         public void InsertFileToXml()
         {
            FileStream fs 
=  File.OpenRead( "d:\\sign.gif");
             byte [] buffer  =   new byte[fs.Length];
            fs.Read(buffer, 0, buffer.Length);

            XmlTextWriter writer  =   new  XmlTextWriter( "d:\\user.xml",System.Text.Encoding.Default);
            
            writer.Formatting = Formatting.Indented;
            writer.WriteStartDocument();
            writer.WriteStartElement( "User");
            writer.WriteElementString( " First_Name " "John");
            writer.WriteElementString( " Last_Name " "Wang");

            writer.WriteStartElement( "Signature");
            writer.WriteAttributeString( " filename " , "sign.gif");
            writer.WriteBase64(buffer,0,buffer.Length);

            writer.WriteEndElement();
            writer.WriteEndElement();
            writer.WriteEndDocument();

            writer.Flush();
            writer.Close();
        }


生成后的XML(user.xml)内容如下:

 

 

<?xml version="1.0" encoding="gb2312"?>
<User>
  < First_Name > John </First_Name>
  < Last_Name > Wang </Last_Name>
  < Signature  filename ="sign.gif" > R0lGODlhZAAZAIAAAJ0IDf///yH5BAAAAAAALAAAAABkABkAAAKXjI+py+0Po5y02ouz3rz7D4biSJbmiabqAbQr2sbANL+Ja9WNzDv6qvvlJMKdLVD74WjESJH1HLKQhuSSEoU2FzHGEqdEBmfW5CV7FaepXe3za4YKs1Tp7a2V16t8hZV9h5WhhJZXFSfWdzfGQffQ49OGEDSleOIIQ+mngnk5eWQIKsrVOcpJZpqqWKpKotkq+gp7JKtQAAA7 </Signature>
</ User >


2.从XML中读取文件

            XmlTextReader reader  =   new  XmlTextReader( @" d:\user.xml");
            while (reader.Read())
             {
                
if  (reader.Name  ==   " Signature "   &&  reader.NodeType == XmlNodeType.Element)
                 {

                    
byte [] buffer  =   new   byte [1024];
                    int size;

                    FileStream file  =  File.Create( " d:\\ "   +  reader.GetAttribute( " filename"));

                     while  (true)
                     {
                        size 
=  reader.ReadBase64(buffer, 0 ,1024);
                         if  (size >0)
                         {
                            file.Write(buffer,
0,size);
                        }
                        else
                         {
                            
break;
                        }
                    }

                    file.Close();
                }

            }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值