打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
使用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 的速度快多了。

 

 

 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
使用delphi 开发多层应用(五)第一个kbmMW 服务例子
在Delphi的脚本里调用返回值为复合类型的webservice
_bstr_t与CString相互转换
Contxt,自定义函数很神奇
Soap.
压缩OLEVARIANT数据
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服