Ir al contenido


Foto

[RESUELTO] Devolver una imagen a través de un Webservice


  • Por favor identifícate para responder
7 respuestas en este tema

#1 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 17 noviembre 2009 - 12:06

Estoy desarrollando un webservice con delphi que consume php y hasta ahora todo ha ido bien, pero me ha surgido un requerimiento y es que debo devolver una imagen a través del webservice.

Alguién sabe como se hace esto?

Desde ya muchas gracias :D
  • 0

#2 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.469 mensajes
  • LocationMéxico

Escrito 17 noviembre 2009 - 08:02

Hola

Tal vez este enlace sea de ayuda, de cualquier forma intentaré desarrollarlo, porque el concepto me parece muy interesante.

Salud OS
  • 0

#3 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 09 diciembre 2009 - 03:47

Hola

Tal vez este enlace sea de ayuda



Pues en verdad ha sido de gran ayuda el enlace. Y me permito compartir la manera en que lo he solucionado:

He creado una clase TRemotable para devolver texto y un objeto del tipo TByteDynArray :



delphi
  1.   TBinImagen = Class(TRemotable)
  2.   private
  3.     FRespuesta: AnsiString;
  4.     Fimagen: TByteDynArray;
  5.   published
  6.     property Respuesta: AnsiString read FRespuesta write Frespuesta;
  7.     property imagen: TByteDynArray  read Fimagen write Fimagen;
  8.   End;



Después he creado el siguiente método



delphi
  1. { Invokable interfaces must derive from IInvokable }
  2.   IIImagen = interface(IInvokable)
  3.   ['{AF016C30-FE52-4C34-8C6B-1A636280CD92}']
  4.     function dameimagen(texto: ansistring): TBinImagen; stdcall;
  5.   end;



implementandolo de la siguiente manera



delphi
  1. function FileToByteArray( const FileName : string ) : TByteDynArray;
  2. const BLOCK_SIZE=1024;
  3. var BytesRead, BytesToWrite, Count : integer;
  4.     F : FIle of Byte;
  5.     pTemp : Pointer;
  6. begin
  7.   AssignFile( F, FileName );
  8.   Reset(F);
  9.   try
  10.     Count := FileSize( F );
  11.     SetLength(Result, Count );
  12.     pTemp := @Result[0];
  13.     BytesRead := BLOCK_SIZE;
  14.     while (BytesRead = BLOCK_SIZE ) do
  15.     begin
  16.       BytesToWrite := Min(Count, BLOCK_SIZE);
  17.       BlockRead(F, pTemp^, BytesToWrite , BytesRead );
  18.       pTemp := Pointer(LongInt(pTemp) + BLOCK_SIZE);
  19.       Count := Count-BytesRead;
  20.     end;
  21.   finally
  22.     CloseFile( F );
  23.   end;
  24. end;
  25.  
  26. function TIImagen.dameimagen(texto: ansistring): TBinImagen;
  27. begin
  28.   Result := TBinImagen.Create;
  29.   Result.imagen := FileToByteArray('C:\apache\htdocs\workflow\images\25407.jpg');
  30.   Result.Respuesta := texto;
  31. end;



Obteniendo en php la representacíón binaria de la imagen mostrandola así:



php
  1.   require_once("lib/nusoap.php");
  2.   $oSoapClient = new soapclient("http://192.168.1.3/cgi-bin/imagen.exe/wsdl/IIImagen",true);
  3.   $aParametros = array("texto" => "prueba de texto");
  4.   $aRespuesta = $oSoapClient->call("dameimagen",$aParametros);
  5.   $imgcode = $aRespuesta['TBinImagen']['imagen'];
  6.   header('Content-type: image/jpg');
  7.   header('Content-length: '.strlen($imgcode));
  8.   echo $imgcode;




Espero que sea de utilidad esta solución.
  • 0

#4 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.469 mensajes
  • LocationMéxico

Escrito 09 diciembre 2009 - 03:50

Que bien que te sirvió amigo, felicidades.

Habrá que asignarlo como tema [RESUELTO] :)

Salud OS
  • 0

#5 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 03 febrero 2010 - 12:20

...Espero que sea de utilidad esta solución.


Amigo Poliburro..., ¿y guardarla? Eso es más interesante para mí en éste momento...

¿Se puede?
  • 0

#6 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 03 febrero 2010 - 12:47


Amigo Poliburro..., ¿y guardarla? Eso es más interesante para mí en éste momento...

¿Se puede?


Saludos amigo, con guardarla te refieres a enviarla desde el navegador al webservice?
  • 0

#7 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 03 febrero 2010 - 02:04

Afirmativo, y dejarla en un campo de una tabla en una base de datos.
  • 0

#8 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 03 febrero 2010 - 04:30

Afirmativo, y dejarla en un campo de una tabla en una base de datos.


Debe ser posible amigo, no lo he hecho así pero es cosa de hacer algunas pruebas. Trataré de darme un tiempo para hacerlo y postear la solución.

Saludos cordiales :D
  • 0




IP.Board spam blocked by CleanTalk.