Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Colaboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #10  
Antiguo 15-02-2017
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 17
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Hola junyandroid, bienvenido a Club Delphi

Quiza el codigo que se publico en el hilo pueda dar lugar a confusiones para alguien novato.

Las "imagenes" no son mas que un monton de caracteres (que no son mas que "bytes") con algun formato en particular. Luego hay componentes o bibliotecas que saben interpretarlo para que se pueda ver en pantalla. Pero no deja de ser un "string gigantesco".

Si tanto tu servidor como cliente son Delphi, la forma mas sencilla de trabajar es usando Streams, en la que basicamente estas trabajando al nivel "bytes". Datasnap es capaz de manejar descendientes de TStream sin que haya necesidad de intervenir ni hacer nada mas

El servidor expone metodos de este estilo: (escribo de memoria, se me puede escapar algun detalle la sintaxis)

Código Delphi [-]
type
{$METHODINFO ON}
  TServer = class(TDataModule)
  public
    procedure RecibirImagen(Stream: TStream);
    function ObtenerImagen({ parametros }): TStream;
  end;
{$METHODINFO OFF}


procedure TServer.RecibirImagen(Stream: TStream);
begin
  Stream.Position := 0;
 // utilizar el parametro Stream para lo que haga falta
end;

function TServer.ObtenerImagen(/*parametros*/): TStream;
begin
  { inicializar Result, es decir, crear algun descendiente de TStream. En este caso uso TFileStream }
  Result := TFileStream.Create(RutaImagen, fmOpen or fmRead);
end;

El cliente (ClientMethods1 es la clase proxy que te genera datasnap)

Código Delphi [-]
procedure EnviarImagen;
var
  Stream: TStream;
begin
  // desde un archivo en disco local
  Stream := TFileStream.Create(RutaImagen, fmOpen or fmRead);
  try
    ClientMethods1.RecibirImagen(Stream);
  finally
    Stream.Free; {*}
  end;

  // desde un componente TImage
  Stream := TMemoryStream.Create;
  try
    Image1.SaveToStream(Stream);
    ClientMethods1.RecibirImagen(Stream);
  finally
    Stream.Free; {*}
  end;
end;

procedure PedirImagen;
var
  Stream: TStream;
begin
  Stream := ClientMethods1.PedirImagen({ parametros });
  try
    Stream.Position := 0;
    // cargar en un TImage
    Image1.LoadFromStream(Stream);

    // grabar a disco
    Stream.SaveToFile(RutaArchivo);
  finally
    Stream.Free; {*}
  end;
end;

{*}: No recuerdo exactamente pero es posible que Datasnap se haga cargo del manejo de memoria de los objetos que pasan a traves del proxy. En ese caso los bloques try-finally sobran y el Free no solo no es necesario sino que podria generar errores.

En realidad no se porque siempre hubo tanto rollo con el base64. Se ha convertido en una suerte de "estandar" cuando en realidad no tiene demasiadas ventajas (la codificacion lleva tiempo, se incrementa el tamaño del stream adicional..). El unico caso en que usaria base64 es si estoy comunicandome con un webservice que ya este implementado asi y no pueda cambiar
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Enviar y recibir .txt y .jpg por puerto serie con C# REHome .NET 6 06-12-2009 08:54:55
enviar y recibir capturar rs232 pipecato Varios 3 17-10-2005 22:17:45
Enviar/Recibir por Pt. paralelo en Delphi 7 desve API de Windows 6 11-10-2005 17:22:07
Enviar/Recibir por Pt. paralelo en Delphi 7 desve Varios 0 29-09-2005 08:14:59
Como puedo enviar y recibir imagenes por Internet JDNA Internet 4 29-03-2004 22:41:09


La franja horaria es GMT +2. Ahora son las 07:22:54.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi