办事端:TROBinMessage,TROIndyHTTPServer
供给办事接口:
IBinaryMidService = interface
[""{51904085-6D27-4EDA-A55D-A9EE21686894}""]
function Add(Const ANum:AnsiString; const AType: AnsiString; const AValue: Binary): Integer;
end;
客户端:TROBinMessage,TROWinInetHTTPChannel,TRORemoteService
数据库:Oracle10,图片字段类型为BLOB
简单介绍:客户端把图片读入到流中并经由过程IBinaryMidService办事传输到办事器,然后有办事器存入到数据库中.
一:客户端生成流畅过办事传输到办事器
1 procedure SavePic;
2 var
3 tmpStream:TROBinaryMemoryStream;
4 VBinaryMidService:IBinaryMidService;
5 begin
6 tmpStream:=TROBinaryMemoryStream.Create;
7 VBinaryMidService:=TBinaryMidService_Proxy.Create(ROMessage,ROChannel);
8 Image1.Picture.Graphic.SaveToStream(tmpStream) ;
9 VBinaryMidService.Add(""0001"",PicType,tmpStream);
10 end;
二:办事端接管流增长到数据库
function TBinaryMidService.Add(Const ANum: AnsiString; const AType: AnsiString; const AValue: Binary): Integer;
var
tmpSQLStr:string;
begin
tmpSQLStr:=format("" into test(num,AType,pic) values (%s,%s,:0)"",[quotedstr(ANum),quotedstr(AType)]);
DBOrder.AddPic(tmpSQLStr,AValue);
end;
//--------------ucDBOrder----------------------
function DBOrder.AddPic(ASQLStr:string;AValue)
var
QryTDB:TADOQuery;
begin
QryTDB:= TADOQuery.Create(nil);
QryTDB.Close;
QryTDB.SQL.Clear;
QryTDB.Connection:=Conn;
QryTDB.SQL.Add(SQLStr);
QryTDB.Parameters.ParamByName(""1"").LoadFromStream(AValue,ftBlob);
QryTDB.SQL;
FreeAndNil(QryTDB);
end;
三:客户端获得数据并显示图片
View Code
1 procedure showPic;
2 var
3 Data:Variant;
4 VBinaryMidService:IBinaryMidService;
5 PicFile:TGraphic;
6 begin
7 //获得数据赋值给
8 VBinaryMidService:=TBinaryMidService_Proxy.Create (ROMessage,ROChannel);
9 VBinaryMidService.GetPic(""00001"",Data);
10 ClientDataSet.Data:=Data;
11 //显示图片
12 if not ClientDataSet1.FieldByName(""Pic"").IsNull then
13 begin
14 if ClientDataSet1.FieldByName(""PicType"").AsString=""BMP"" then
15 //显示bmp文件
16 PicFile:=TBitmap.Create;
17 else
18 if ClientDataSet1.FieldByName(""PicType"").AsString=""JPG"" then
19 begin
20 //显示JPG文件
21 PicFile:=TJPEGImage.Create;
22 end else
23 if ClientDataSet1.FieldByName(""PicType"").AsString=""ICO"" then
24 begin
25 //显示ICO文件
26 //IcoFile:=TIcon.Create; // IcoFile.Free;
27 PicFile:=TIcon.Create;
28 end else
29 if ClientDataSet1.FieldByName(""PicType"").AsString=""PNG"" then
30 begin
31 //显示PNG文件
32 PicFile:=TPNGObject.Create;
33 end else
34 if ClientDataSet1.FieldByName(""PicType"").AsString=""GIF"" then
35 begin
36 //显示PNG文件
37 PicFile:=TGIFImage.Create;
38 end;
39 mStream:=TMemoryStream.Create ;
40 TBlobField(ClientDataSet1.FieldByName(""Pic"")).SaveToStream(mStream);
41 mStream.Position :=0;
42 PicFile.LoadFromStream(MStream);
43
44 image1.Picture.Assign(PicFile);
45 PicFile.Free;
46 mStream.Free;
47 end;
48 end;