Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #6  
Antiguo 06-10-2007
rolandoj rolandoj is offline
Miembro
 
Registrado: abr 2007
Posts: 395
Poder: 18
rolandoj Va por buen camino
Smile La parte del cliente

Hola,

Para la parte del cliente, tenemos un TDatamodule (en nuestro ejemplo dmWeb), con el componente Indy, TIdHTTP (en nuestro ejemplo ElHTTP).
El punto clave es la clase TMsMultiPartFormDataStream de la unidad MsMultiPartFormData. Tampoco recuerdo si viene con Indy 8; pero si tienes algún problema para localizar estas unidades, avisame.

Esta clase permite armar un mensaje compuesto, agregando tanto campos simples, como archivos.

El siguiente código ilustra la técnica:

Código Delphi [-]
Procedure TdmWeb.GrabarArchivo(AnURL,ACode,AFileName:String);
Var
   ResponseStream:      TMemoryStream;
   MultiPartFormDataStream: TMsMultiPartFormDataStream;
Begin
     MultiPartFormDataStream := TMsMultiPartFormDataStream.Create;
     ResponseStream          := TMemoryStream.Create;
     try
        ElHTTP.Request.ContentType := MultiPartFormDataStream.RequestContentType;
        { Agrega uno o más campos simples }
        MultiPartFormDataStream.AddFormField('CODE', ACode);
        { Agrega uno o más archivos }
        MultiPartFormDataStream.AddFile('Archivo', AFileName, 'image/dwf');
        { Es necesario hacer esta inicialización antes de enviar el stream }
        MultiPartFormDataStream.PrepareStreamForDispatch;
        MultiPartFormDataStream.Position := 0;
        { Ahora sí se envía la petición  }
        ElHTTP.Post(AnURL,MultiPartFormDataStream, ResponseStream);
     finally
        MultiPartFormDataStream.Free;
        ResponseStream.Free;
     end;
End;

Los puntos a resaltar son los siguientes:

El parámetro AnURL es solo el DLL y la acción requerida, sin parámetros simples. En nuestro ejemplo, algo como :

http://192.168.x.x/midll.dll/EscArchivo

El tipo de contenido para la propiedad Request del TidHTTP debe indicar multiforms y eso se hace tomandolo del TMsMultiPartFormDataStream
Cada campo simple se agrega con el método AddFormField, que recibe 2 parámetros : El nombre del campo y su valor

Cada archivo se agrega con el método AddField. El primer parámetro indica el nombre que puedes usar en el servidor para identificar dicho archivo. En el ejemplo que puse, a efectos de ilustración, como es un solo archivo, a efectos de identificarlo en el servidor usé el campo CODE y no este parámetro. El segundo parámetro es el camino completo al archivo en el cliente. El último parámetro es el tipo de contenido del archivo que se agrega. Este parámetro es importante, indicar el contenido equivocado puede causar la falla de la carga. En el ejemplo, estoy subiendo un archivo en formato dwf (el plano de una construcción generado por Autocad)

Finalmente, como ves en los comentarios, son necesarias las dos instrucciones de inicialización antes de ejecutar el Post.

Suerte
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
ftp Upload / Download (Aplicación) seoane Internet 15 08-03-2008 15:24:37
upload masivo kayetano PHP 12 06-12-2006 16:45:39
UPLOAD de varios archivos por código HombreSigma .NET 3 04-12-2005 15:23:07
no se puede enviar por mail archivos pdf? jpcancino Internet 6 10-03-2004 15:57:48
como upload una bB.D. bdf con un form kassel PHP 4 22-01-2004 21:01:55


La franja horaria es GMT +2. Ahora son las 08:17:44.


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