使用delphi 开发多层应用(二十) ios通过soap 显示kbmmw服务器上的图片

    上一次通过soap,使IOS 访问了kbmmw服务器,今天顺便看能不能与android 共用服务器上的那个

下载图片的功能。首先说一下服务端的的程序,基本上就是前面的代码,没有变化,只是要indy 里面的

base64 编码功能,不再啰嗦,直接代码:

function Txalionsrv.Performgetimgm(ClientIdent: TkbmMWClientIdentity;
  const Args: array of Variant): Variant;
var
    fs:TMemoryStream;
    filename:string;
    base64:pansichar;
    i:integer;
    flen,bsize:int64;
    b64:TIdencoderMIME;
begin
 filename:='D:\picture\'+args[0];

  if not FileExists(filename) then
     begin
       kbmMWRaiseServerException('文件不存在!');
       exit;
     end;

  fs:=TMemoryStream.Create;
  b64:=TIdEncoderMIME.Create();
  try
   fs.LoadFromFile(filename);
   result:=b64.EncodeStream(fs)
 finally
    fs.Free;
    b64.Free;
  end;
end;

客户端为了显示图片,改变了一下界面

增加了一个Timage 控件,和一个显示按钮

把soap 调用整理成一个公共过程:

function remoterequest(ip,servicename,funcname:string;v:Variant;var StatusText:string;var vout:Variant):integer;

   var
   server:IProcessRequestSOAPPort;
   req:ProcessRequest;
   res:TkbmMWSOAPResponse;

begin
    result:=-1;
      server:=GetIProcessRequestSOAPPort(false,
            'http://'+ip+'/server1',nil);
            req:=ProcessRequest.Create;
         try
          // Setup request.
                  req.ServiceName:=servicename;//'XALION_SRV';
                  req.ServiceVersion:='';
                  req.StateID:=-1;
                  req.Func:=funcname;//'sumall';

                 // Setup identity.
                 //req.Ident:=TkbmMWSOAPClientIdentity.Create;
                 //req.Ident.Username:=’HANS’;
                 //req.Ident.Password:=’somepassword’;

                  req.Args:=v;

                  // Call app server.
                  res:=server.ProcessRequest(req);
              try
            // Check response.
                  StatusText:=res.StatusText;
                  if res.StatusCode=0 then // OK
                  begin
                    result:=0;
                    vout:=res.Result;
                  end;
                finally
               res.Free;
            end;
            finally
            req.Free;
          end;
end;

 然后在按钮点击里面使用下面代码:

procedure TForm1.Button2Click(Sender: TObject);
var
   args:array[1..4] of Variant;
   ms:TMemoryStream;

   v,vout:variant;
   s:String;
   len,mlen:integer;

   b64:TIdDecoderMIME;

   img:Tbitmap;

begin
   v:=VarArrayCreate([0,1],varVariant);

   v[0]:='1.JPG';

  if  remoterequest(servername.Text,'XALION_SRV', 'getimgm',v,s,vout)<>0 then
     begin
       edit1.Text:='bad' ;
       exit;
     end;
   Label1.Text:=s;
   s:=vout;
   b64:= TIdDecoderMIME.Create;

  try
    ms:=TMemoryStream.Create;
   b64.DecodeStream(s,ms);
   img:=Tbitmap.CreateFromStream(ms);
   image1.Bitmap:=img;
  finally
      ms.Free;
      b64.Free;
  end;

end;

 编译,然后在mac 上ios模拟器上运行,显示下面的效果:

整体感觉,ios 的模拟器比android 的速度快多了。

 

 

 

时间: 2024-09-30 21:40:31

使用delphi 开发多层应用(二十) ios通过soap 显示kbmmw服务器上的图片的相关文章

使用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 webserver 返回JSON

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

使用delphi 开发多层应用(十)安全访问服务器

      前面讲了如何建立和访问服务器,但是前面建的服务器都没有安全控制,这里有很大的安全问题,第一是任何人做一个客户端都可以都可以访问 服务器.第二是数据在网络传输过程中都是明码的,没有加密,使用网络侦听器就可以检测到传输的内容.这是一个标准的系统不允许的,今天就 讲一下如何安全的访问服务器.      首先我们需要使用加密来保证数据在网络上传输的安全,首先在服务器端我们加一个TkbmMWDCP2Crypt.这个是kbmMW 对DCP2Crypt的封装, DCP2Crypt 是一个用pasc

使用delphi 开发多层应用(十八)使用Basic4android 访问RTC 服务的二进制流(照片)

    上次写了b4a 通过xmlrpc 访问rtc 的远程服务,有网友询问如何通过b4a 访问RTC web 的二进制流,例如如何下载 服务器上的照片,其实访问二进制流和访问字符串类似,不同的地方是,由于是通过http 协议,对于二进制流,需要先转换成 base64 编码,到客户端后再再把base64 转换回去成二进制码,就可以了.(注:由于RTC 的bug,需要RTC 6.08 以上的版本)    RTC服务器端的代码如下: procedure TForm1.RtcFunction3Exec

使用delphi 开发多层应用(十四)使用Basic4android 显示kbmMW server数据

    前面说了basic4android 直接访问kbmMW server 的方法,由于javaclient 不直接支持服务器端数据库的操作, 要显示数据的内容就需要通过JSON 方式来转换.今天就大概介绍一下转换的办法. 首先要在服务器端把数据库转换为JSON ,为了方便,我修改了一下前面的转换过程. function Txalionsrv.datatojson(intablename: string): string; var alljson: ISuperObject; datajson

使用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 的数据

Android开发入门(二十)内容提供者 20.2 ContentProvider的使用范例

想要理解ContentProvider的最佳方式就是自己动手去尝试一下.下面介绍如何使用一个内置的Contacts ContentProvider. 1. 创建一个工程,Provider. 开发入门(二十)内容提供者 20.2 ContentProvider的使用范例-contentprovider"> 2. main.xml中的代码. <?xml version="1.0" encoding="utf-8"?> <LinearLa

Android开发入门(二十)内容提供者 20.1 数据共享

在上一章节中,我们介绍了数据持久化的几种方法:首选项,文件,以及数据库.在保存复杂的数据结构 时,推荐使用SQliteDatabase.但是,共享数据就成了一种挑战,因为,数据库只对创建它的程序包可用. 在这一章节中,将会介绍Android特有的数据共享方式:使用ContentProvider.也会介绍如何使用内 置的ContentProvider,以及创建自己的ContentProvider,以便在多个程序包之间共享数据. 在 Android中,共享数据的推荐方式是使用ContentProvi