XML如何传送二进制如:图形之类的数据?(50分)

  • 主题发起人 主题发起人 吴剑明
  • 开始时间 开始时间

吴剑明

Unregistered / Unconfirmed
GUEST, unregistred user!
都说XML的数据描述能力强,那如何传送二进制的东东?
 
使用base64编码。
 
同意。容易得很啊。
 
同志们,容易就给个DEMO出来吧?
grhunter有灌水嫌疑。:)
 
弟兄们帮忙嘛
 
需要吗?你用ado打开一个含有blob字段的表,然后保存为xml,打开看看不就知道了。
如何使用base64,很多书都介绍过。
<?xml version="1.0" encoding="utf-8"?>
<xsd:schema id="XMLSchema2" targetNamespace="http://360cn.com/Demo.xsd" xmlns="HTML 4.0" xmlns:xsd="http://www.w3.org/1999/XMLSchema">
<xsd:element name="Demo">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="ImageName" type="xsd:string">
</xsd:element>
<xsd:element name="ImageType" type="xsd:string">
</xsd:element>
<xsd:element name="Image" type="xsd:binary">
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
 
是啊!
我也想说,
你用个clientdataset存一个代bolb域的表不就什么都可以看到了。
 
可别再说我灌水啦:
Indy已经是D6的集成控件组了,所以我用了Indy的TIndyBase64Encoder,真的好简单啊。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IdCoder3To4, IdBaseComponent, IdCoder;
type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
IdBase64Encoder1: TIdBase64Encoder;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
implementation
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
MyFileStream :TFileStream;
Buffer :String;
begin
try
MyFileStream:=TFileStream.Create('banner.gif',fmOpenRead);
SetLength(buffer, MyFileStream.Size);
MyFileStream.Read(Buffer[1], MyFileStream.Size);
Buffer:=IdBase64Encoder1.CodeString(Buffer);
//得到编码后的字符串
memo1.Lines.Add(Buffer);
finally
MyFileStream.Free;
//eventually
end;
end;

end.
 
D6有一个例子,就是用ClientDataSet打开XML格式的数据集的,有图象字段
本来想把这个XML贴上来,不过没换行
总之和前几位说的差不多
 
多人接受答案了。
 
后退
顶部