Tema: UDP send jpg
Ver Mensaje Individual
  #4  
Antiguo 18-11-2007
rolandoj rolandoj is offline
Miembro
 
Registrado: abr 2007
Posts: 395
Reputación: 18
rolandoj Va por buen camino
Smile Un ejemplo de envío JPG con Indy

Hola,

Bueno, para enviar un archivo desde un cliente a un servidor Web usando Indy debes hacer lo siguiente:

1. Crea un módulo de datos (TDataModule)

2. Colocale un componente TidHTTP (está en la pestaña Indy Clients, creada en el IDE de Delphi por la instalación de Indy)

3. Colocale un componente TIdAntiFreeze, en la pestaña Indy Misc. (este solo es para evitar la "congeladas" típicas de internet, no se usa en el envío en sí)

4. Para nuestro ejemplo, llamemos dmWeb al TDataModule e idConexion al TidHTTP.

5. Descarga la unidad llamada MsMultiPartFormData. La puedes descargar en este enlace:

http://www.pudn.com/downloads49/sour...ail166574.html

Esta es una página en chino; probablemente tú navegador te preguntará si quieres instalar caracteres chinos; puedes decirle que no. Verá al tope de la misma el texto "IndyMultipartFormData" y al lado una flecha verde. Usa esa flecha para descargar un punto Zip que contiene un ejemplo del uso de esta unidad; pero lo que interesa es solo la unidad en sí que es muy pequeña.

6. Ahora agrega la unidad MsMultiPartFormData a tú proyecto y a la clausula Uses de tú TDataModule

7. Finalmente crea un método cuya apariencia es la siguiente:

Código Delphi [-]
Procedure TdmWeb.GrabarImagen(ACode,AFileName:String);
Var
   TheURL:              String;
   ResponseStream:      TMemoryStream;
   MultiPartFormDataStream: TMsMultiPartFormDataStream;
Begin
     TheURL                  := 'http://localhost/MiDirectorio/Miservidor.dll/MiAccion';
     MultiPartFormDataStream := TMsMultiPartFormDataStream.Create;
     ResponseStream          := TMemoryStream.Create;
     try
        idConexion.Request.ContentType := MultiPartFormDataStream.RequestContentType;
        { Agrega cada dato a enviar }
        MultiPartFormDataStream.AddFormField('ELCODIGO', ACode);
        MultiPartFormDataStream.AddFile('ELARCHIVO', AFileName, 'image/jpg');
        { Prepara el envío. Esto es obligatorio }
        MultiPartFormDataStream.PrepareStreamForDispatch;
        MultiPartFormDataStream.Position := 0;
        { Envía los datos }
        idConexion.Post(TheURL,MultiPartFormDataStream, ResponseStream);
     finally
        MultiPartFormDataStream.Free;
        ResponseStream.Free;
     end;
End;

Este ejemplo envía una imagen JPG; pero puedes aplicarlo a otros tipos de archivo. Como te podrás dar cuenta. El asunto es solo cosa de cambiar el parámetro 'image/jpg' por el adecuado para tú archivo

Ahora bien, la línea que hace referencia al campo 'ELCODIGO' no es necesaria. La coloco solo para ilustrar el hecho que junto al archivo se pueden enviar otros datos como campos normales. De hecho se pueden enviar varios archivos a la vez. Creo que es claro que agregar un campo es usar un AddFormField y agregar un archivo es usar un AddFile

Lógicamente, el valor "ELARCHIVO" es para dar un nombre al archivo que se envía y el valor AFileName es el nombre de la ruta completa del archivo en el equipo cliente.

Me comentas si necesitas ayuda del lado del servidor

Suerte
Responder Con Cita