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
  #5  
Antiguo 06-10-2007
rolandoj rolandoj is offline
Miembro
 
Registrado: abr 2007
Posts: 395
Poder: 20
rolandoj Va por buen camino
Smile El código en el servidor ISAPI

Hola,

Perdón por la demora; pero anoche llegué muy tarde.

Como te dije, yo tengo funcionando una aplicación que hace la carga exactamente como la necesitas. Está desarrollada en Delphi 4 con Indy 8.

El secreto del asunto está en la técnica para MultiForms; es decir,
enviar al servidor, en un solo requerimiento, tanto datos simples,
como un código o un nombre, junto con uno o más archivos.

En el caso del servidor, necesitaremos tener disponible la clase
TMsMultipartFormParser. Esta clase la encuentras en la unidad
MsMultipartParser. No recuerdo bien si esa unidad viene con Indy 8 o si la bajé de otro sitio de Internet; pero puedes buscarla con Google.

Con eso en mente, ubiquemonos en el TWebModule (que en el ejemplo que
te doy es dmServidor). Agrega una acción llamada EscArchivo, en ella
deberás escribir un código como el siguiente:

Código Delphi [-]
procedure TdmServidor.dmServidorEscArchivoAction(Sender: TObject;
  Request: TWebRequest; Response: TWebResponse; var Handled:Boolean);
Var
   TheCode:             String;
   TheParser:           TMsMultipartFormParser;
begin
     TheParser := TMsMultipartFormParser.Create;
     Try
        TheParser.Parse(Request);
        TheCode := TheParser.ContentFields.Values['CODE'];
        GrabarArchivo(TheCode,TheParser.Files[0].FileData);
     Finally
        TheParser.Free;
     End;
end;

Logicamente, este es un ejemplo sencillo que no incluye el control de errores que debes tener en la realidad.

Vayamos por partes para entender este código.

Como es normal, el parámetro Request trae la totalidad de la petición
hecha por el cliente (ya veremos como se construye). El método Parse
se encarga de descomponer ese requerimiento de forma que otras
propiedades de nuestro objeto clave puedan acceder directamente a sus
valores.

La propiedad ContentFields es la que tiene los campos "normales"; en
el ejemplo, estamos cargando un archivo a una base de datos, y el
parámetro CODE nos sirve para identificarla ahí.

Los archivos están en la propiedad Files, esta se indexa por número
de archivo desde 0, así que como estamos subiendo solo uno, usamos
Files[0]. Cada item de esta propiedad es un objeto del tipo THTTPFile
y la propiedad FileData de ellos es un TStream conteniendo al archivo
en sí; de esta forma, cuando llamamos al método GrabarArchivo, ese sí
desarrollado por nosotros, le estamos pasando tan solo el código que
necesitamos para identificar el archivo y el archivo en sí, en formato
TStream (que es una clase implementada por Delphi), de ahí en
adelante si es solo Delphi puro.

Un poco más tarde te describo la parte del cliente; ya que como supondrás, no es tan simple como lo planteas en tú ejemplo.

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 14:49:10.


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