FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Upload de archivos en ISAPI, se puede ?
Estoy haciendo un webserver , o sea una Dll ISAPI con Delphi 7 y necesito que alguien me envie un archivo.
El tema es que ademas no puedo usar forms de HTML, ya que el webserver no sera visto desde una pagina html, sino que sera peticionada / accedida por una pocket pc. La cual llamara a la dll de la forma //192.168.x.x/midll.dll?Dato1=ValorX&Dato2=ValorY Mi idea seria que tambien me puedan hacer upload de archivos de la siguiente manera: //192.168.x.x/midll.dll?Dato1=ValorX&Dato2=ValorY&FileToUpload=C:\prueba.txt Es esto posible ? Si es asi, como capturo o leo este archivo desde mi dll ? Alguien puede ayudarme ? Gracias Última edición por lsg fecha: 03-10-2007 a las 20:37:33. |
#2
|
||||
|
||||
ISAPI????????, aún existe?, :O
__________________
Conoce mi blog http://www.edgartec.com |
#3
|
|||
|
|||
En el mundo , todavia hay gente programando con delphi 5 ,6 , 7....
Incluso Con visual basic, Fox Pro, Clipper, etc. por que deberia desaparecer la ISAPI ? Por favor, necesito respuestas que me ayuden. Gracias |
#4
|
|||
|
|||
Es perfectamente posible
Hola,
Yo tengo desarrollada con Delphi 4 e Indy una aplicación entre cuya funcionalidad está exactamente ese Upload como lo necesitas. Esta tarde estoy ocupado; pero a la noche te escribo un ejemplo en código Delphi |
#5
|
|||
|
|||
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:
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 |
#6
|
|||
|
|||
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:
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 |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
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 |
|