使用delphi 开发多层应用(六)kbmMW返回流到客户端

   在第一个简单的例子,服务器返回给客户端的是一个简单的变量,但是在日常的应用中,往往需要给客户端传输大量的数据,例如要

返回流,在kbmMW 里面返回流也是比较方便的,下面我们就以给客户端返回一个照片为例,说明一下。

  还是在上次的例子服务里面,我们添加一下这个功能,首先要定义服务函数处理:

 

  function Performgetimg(ClientIdent:TkbmMWClientIdentity; const Args:array of Variant):Variant; virtual;

 然后把函数名与处理过程在服务里面对应起来:

function Txalionsrv.ProcessRequest(const Func: string;const ClientIdent: TkbmMWClientIdentity;const Args: array of Variant): Variant;

var   AFunc:string;begin     AFunc:=UpperCase(Func);if AFunc='SUMALL' then        Result:=Performsumall(ClientIdent,Args)else if AFunc='GETIMG' then        Result:=Performgetimg(ClientIdent,Args)end;

最后就是函数处理的具体实现:

function Txalionsrv.Performgetimg(ClientIdent: TkbmMWClientIdentity;const Args: array of Variant): Variant;var    fs:Tfilestream;begintryif not FileExists('D:\picture\'+args[1]) thenbegin       kbmMWRaiseServerException('文件不存在!');       exit;end;

fs:=Tfilestream.Create('D:\picture\'+args[1]);

ResultStream.LoadFromStream(fs);finally    fs.Free;end;

end;

好了,服务器端就完成了,可以编译运行了。

 

现在来处理客户端,在客户端form 上放一个button 和image 控件,如图:

并输入按钮点击事件:

procedure TForm2.Button2Click(Sender: TObject);var   args:array[1..4] of Variant;   ms:TMemoryStream;begin   args[1]:='1.JPG';   kbmMWSimpleClient1.Request('xalion_srv','','getimg',args);

kbmMWSimpleClient1.ResultStream.SaveToFile('c:\1.jpg');

Image1.Picture.LoadFromFile('c:\1.jpg');

end;

 

ok 同时运行服务器和客户端程序,我们就可以从服务器上下载照片流,并在客户端显示了。

存补:2013.12.09

如果不想在客户端机器上使用临时文件,可以直接用流,但是需要知道图片格式

 

procedure TForm1.Button1Click(Sender: TObject);
 begin
  var
   args:array[1..4] of Variant;
   NewG: TJPEGImage;

begin
   args[1]:='1.JPG';
   kbmMWSimpleClient1.Request('xalion_srv','','getimg',args);

   newg:=TJPEGImage.Create;
  newg.LoadFromStream(kbmMWSimpleClient1.ResultStream);
  image1.Picture.Graphic.Free;
  image1.Picture.Graphic:=newg;

end;

 

时间: 2024-07-31 15:56:10

使用delphi 开发多层应用(六)kbmMW返回流到客户端的相关文章

使用delphi 开发多层应用(二十一)使用XE5 RESTClient 直接访问kbmmw 数据库

     delphi XE5 出来了,增加了android 的开发支持,另外增加了一个RESTClient 来支持访问REST 服务器. 这个功能非常强大,可以直接使用非常多的REST 服务器.同时也可以支持访问kbmmw 的web 服务器, 并完美的通过JSON支持使用kbmmw 的JSON 数据格式.使我们非常方便的在win32,win64,mac os,ios 和android 上访问kbmmw 的数据库.     首先我们建立一个可以返回JSON 的kbmmw web 服务器.这个可以

使用delphi 开发多层应用(三)Delphi常用多层框架介绍

    目前在delphi 开发多层应用的框架基本上集中在以下几种,每种开发框架都有自己的优缺点,没有最好的,大家可以根据 自己的实际需求选择相应框架,我把我本人在使用几种框架的体会与大家分享一下.如有不对之处,可以拍砖.      1. DELPHI 自身提供的DataSnap       从delphi 3 开始,delphi 自身就开始支持多层开发,后期的版本逐步加强三层开发功能,在delphi 6 以后, 把这一功能叫Datasnap,并且每个都有很多变化,包括DBExpress 的数据

使用delphi 开发多层应用(十二)使用kbmMW webserver 返回JSON

     由于kbmMW 服务器与客户端交互是使用它的专用数据格式,因此与其它语言及平台相互访问的话就会有兼容问题, 为了最大化的利用kbmMW 服务器,从kbmMW 4.0 以后,其开始支持JSON 格式传递数据,其实就是可以通过 Webserver根据客户端的request 来返回对应的JSON串.     继续利用上次的webserver 的例子,在webservice 里面加一个TkbmMWIBDACQuery和TkbmMWJSONStreamFormat, 如图: 同时在代码里面添加以

使用delphi 开发多层应用(十三)使用Basic4android 直接访问kbmMW server

 由于目前delphi xe2 还不直接支持Android 的开发,因此kbmMW 客户端的功能也没办法直接在Android 上运行. 由于kbmMW 为了与java 应用程序通讯,在企业版里面提供了一个JavaClinet. 具体文件名为kbmMWClient.jar. 而在basci4android 可以直接使用这个jar. 也就是说通过kbmMW 的javaclient 可以直接访问kbmMW 的服务器. 当然由于客户端没有kbmMemTable的功能,一次只能是访问远程服务过程,无法直接

使用delphi 开发多层应用(四)kbmMW 的安装与配置

更新至kbmmw 5.04.  (2017.12.14) --------------------- 目前的KbmMW 最新版是4.0 beta 版,它支持最新的delphi XE2 ,同时支持win32,win64,mac osx的编译开发. 增加了原生的JSON 的支持(看来JSON 是越来越热了:)),同时提高了http web 的功能,作者已经用最新的KbmMW 替换了 原来使用aspx 的下载网站,其使用kbmMW 的web服务,并使用AJAX 来实现数据列表,经过我的使用,效果还不错

使用delphi 开发多层应用(七)简单的kbmMW多层数据库访问服务

      刚写完几个多层的例子,本来准备再写点其他稍微复杂的例子,很多同学就问数据库访问的方法,既然这样,就先写一下 数据库访问的过程与方法.kbmMW 支持很多数据库访问方式和控件,前面在安装时已经说过了.由于delphi 已经在d7 以后 不再推荐使用其传统的数据库方式BDE了,尤其是在delphi XE2 由于支持win64, 已经不支持使用BDE 了,为了演示方便,本文 后台数据库选择使用完全免费的firebird.firebird 是一个非常短小精悍的关系数据库,支持存储过程.触发器

使用delphi 开发多层应用(十九) ios通过soap 访问kbmmw服务器

      随着delphi XE4 的推出,开始真正意义上支持ios 的开发,由于目前kbmmw 还不完全支持ios 的开发,因此 无法直接使用kbmmw 的客户端访问kbmmw 的服务器(虽然kbmmw 也提供了C 的客户端,可以使用xcode连接 kbmmw的C 客户端来访问kbmmw 服务器,但是功能有限,而且要熟悉xcode),对于急着想在ios 使用kbmmw 服务的同学,可以先使用kbmmw 的webservice 方式访问kbmmw 服务器.   下面我就介绍以下如何在ios 访

使用delphi 开发多层应用(八)客户端更新数据到kbmMW服务器

   上次写了从kbmMW服务器给客户端返回数据,我们实现了数据的查询功能,但是当客户端对数据进行了增加.更新.删除的操作, 我们必须把这些操作返回到服务器端,并对后台数据库进行更新.kbmMW 可以很方便的实现这一功能,今天就做一个更新数据到 服务器的例子.    还是在昨天的基础上,我们要把客户端的信息更新到服务器上,首先需要在服务器端的Tkbmqueryservice 设置允许客户端更新 的权限,如图 即把allowclient 开头的几个属性都设为True; 同时为了保证客户端可以插入数

使用delphi 开发多层应用(十一)使用kbmMW 开发webserver

用kbmMW 开发webserver也是非常方便的. 还是以前面的简单服务器为基础,我们先要通过kbmMW的service wizard 来建立web 服务. 如图,先选择web server service 点下一步,出现选择文件目录的界面 我们这里用webfiles 相对路径,就是在网页文件放到可执行文件目录下的webfiles 目录. 点下一步,出现输入服务名的界面,注意这里的服务名必须是HTTPSERVICE. 后面的基本上就和其他服务类似了,可以一路点下去了.然后就生成对应的服务器代码