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

简介: 上一次通过soap,使IOS 访问了kbmmw服务器,今天顺便看能不能与android 共用服务器上的那个 下载图片的功能。首先说一下服务端的的程序,基本上就是前面的代码,没有变化,只是要indy 里面的 base64 编码功能,不再啰嗦,直接代码: function Txalionsrv.

    上一次通过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 的速度快多了。

 

 

 

目录
相关文章
|
2天前
|
关系型数据库 API 数据库
后端开发的艺术:从零到一构建高效服务器
在数字化时代,后端开发是支撑现代互联网应用的基石。本文旨在探讨后端开发的核心概念、关键技术以及如何构建一个高效的服务器。我们将从基础的编程语言选择开始,逐步深入到数据库设计、API开发和性能优化等关键领域。通过实际案例分析,我们将揭示后端开发的复杂性和挑战性,同时提供实用的解决方案和最佳实践。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的见解和启发。
|
8天前
|
Swift iOS开发 UED
如何使用Swift和UIKit在iOS应用中实现自定义按钮动画
【10月更文挑战第18天】本文通过一个具体案例,介绍如何使用Swift和UIKit在iOS应用中实现自定义按钮动画。当用户按下按钮时,按钮将从圆形变为椭圆形并从蓝色渐变为绿色;释放按钮时,动画恢复原状。通过UIView的动画方法和弹簧动画效果,实现平滑自然的动画过渡。
30 5
|
15天前
|
网络安全 Docker 容器
VScode远程服务器之远程 远程容器 进行开发(五)
VScode远程服务器之远程 远程容器 进行开发(五)
17 1
|
25天前
|
Java PHP
PHP作为广受青睐的服务器端脚本语言,在Web开发中占据重要地位。理解其垃圾回收机制有助于开发高效稳定的PHP应用。
【10月更文挑战第1天】PHP作为广受青睐的服务器端脚本语言,在Web开发中占据重要地位。其垃圾回收机制包括引用计数与循环垃圾回收,对提升应用性能和稳定性至关重要。本文通过具体案例分析,详细探讨PHP垃圾回收机制的工作原理,特别是如何解决循环引用问题。在PHP 8中,垃圾回收机制得到进一步优化,提高了效率和准确性。理解这些机制有助于开发高效稳定的PHP应用。
39 3
|
6天前
|
NoSQL PHP Redis
布谷语音app源码服务器环境配置及技术开发语言
布谷语音app源码服务器环境配置及技术语言研发。。
|
15天前
|
Kubernetes 网络安全 容器
VScode远程服务器进行开发(三)
VScode远程服务器进行开发(三)
20 0
|
15天前
|
存储 弹性计算 安全
阿里云第七代云服务器ECS性能、适用场景与价格参考
阿里云第七代云服务器ECS(Elastic Compute Service)作为阿里云最新一代的高性能计算产品,凭借其基于最新硬件架构和虚拟化技术的全面升级,在计算能力、存储性能、网络传输速度以及灵活性等多个方面实现了显著提升。这一代云服务器旨在为用户提供更为强大、稳定且可定制的云端基础设施服务,广泛适用于从基础的Web托管到复杂的高性能计算等多种应用场景。
|
14天前
|
弹性计算 网络安全
阿里云国际OpenAPI多接口快速管理ECS服务器教程
阿里云国际OpenAPI多接口快速管理ECS服务器教程
|
3天前
|
存储 弹性计算 NoSQL
"从入门到实践,全方位解析云服务器ECS的秘密——手把手教你轻松驾驭阿里云的强大计算力!"
【10月更文挑战第23天】云服务器ECS(Elastic Compute Service)是阿里云提供的基础云计算服务,允许用户在云端租用和管理虚拟服务器。ECS具有弹性伸缩、按需付费、简单易用等特点,适用于网站托管、数据库部署、大数据分析等多种场景。本文介绍ECS的基本概念、使用场景及快速上手指南。
17 3
|
8天前
|
存储 弹性计算 编解码
通过阿里云的活动租赁云服务器时如何选择实例规格?选择指南参考
新手用户通过阿里云的活动租赁云服务器的时候实例规格应该怎么选?目前在阿里云的活动中,可选的云服务器类型除了轻量应用服务器之外,云服务器的主要实例规格有经济型e、通用算力型u1和计算型c7与c8y、通用型g7与g8y、内存型r7与r8y等实例,但是对于新手来说,由于是初次购买,实例规格往往不知道怎么选择了。本文为大家展示阿里云目前活动中各云服务器实例规格性能、适用场景以及选择指南参考。