 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
titipower Ens

Registrado: 27 Nov 2002Mensajes: 39Ubicación: España
|
Publicado: Jue 10 Feb, 2005 1:16 pm Asunto: Pasar archivo generado al servidor (Internet) protoc TCP/IP |
|
|
Mi aplicación crea un pdf en local y otro lo pasa al servidor (ordenador donde se encuentra la bd y unas carpetas compartidas para copiar archivos generados por mi aplicación). Cuando esta en red local todo va bien.
Ahora me han pedido que mi aplicación funcione a travez de Internet (protocolo TCP/IP) y resulta que va todo bien (conectar con la bd, trabajar con ella, generar archivos local, etc.) menos el pasar los archivos al servidor.
¿Como puedo realizar una copia de un archivo generado (.doc, .pdf) al servidor por TCP/IP?
Otra cosilla, si el servidor tiene ahora un router, por lo q he entendido, tengo que decirle al router que todo lo que entre por el puerto 3050 (bd interbase) lo mande al ordenador servidor. Ok?
Gracias!! |
|
| Volver arriba |
|
 |
alfredo Master

Registrado: 13 Oct 2003Mensajes: 246Ubicación: Valencia Venezuela
|
Publicado: Vie 11 Feb, 2005 9:02 pm Asunto: |
|
|
Saludos;
Una forma es poner un servidor FTP en la maquina que tiene la BD y utilizar el componente Indy de ftp en tu aplicacion, esto implica ciertos riesgos de seguridad y tener experiencia configurando el server.
Hay otra forma a mi modo de ver menos complicada, mas segura y mas limpia de conseguir lo que deseas.
Por lo que entiendo los documentos generados en una estacion deben poder ser compartidos con otras, ¿Por que usar carpetas compartidas con infinidad de documentos que podrian ser borrados o alterados por accidente o con intencion?
En un campo blob puedes meter lo que sea, en cualquier tipo de BD, en IB he logrado guardar un archivo de 430 Mb a traves de la red local en pocos segundos.
A continuacion te coloco un poco de codigo para una aplicacion que guarda en la BD cualquier tipo de archivo, permite extraerlo y ejecutarlo y guardar las modificaciones hechas.
Primero debes crear una tabla al menos con un campo blob y otros dos varchar, en el primero guardamos el archivo y en el segundo su nombre y el tercero su extension (opcional) Hay tres botones Uno Adjuntar guarda el archivo seleccionado en un registro, ExtraerEn extrae el archivo donde se indique, ExtraerEjecutar extrae el archivo en un directorio temporal y lo abre con la aplicacion asociada en windows o lo ejecuta directamente en caso de ser ejecutable(Cuidado Aqui con virus y Troyanos, para eso es el campo Ext
| Código: | //---------------------------------------------------------------------------
void __fastcall TfAdjuntos::AdjuntarClick(TObject *Sender)
{
if(OpenDialog1->Execute())
{
fProyectos->tbAdjuntos->Append();
static_cast<TBlobField *>
(fProyectos->tbAdjuntos->FieldByName("Contenido"))->LoadFromFile(OpenDialog1->FileName);
fProyectos->tbAdjuntos->FieldByName("Nombre")->AsString=
ExtractFileName(OpenDialog1->FileName);
fProyectos->tbAdjuntos->FieldByName("Ext")->AsString=
ExtractFileExt(OpenDialog1->FileName);
fProyectos->tbAdjuntos->Post();
}
}
//---------------------------------------------------------------------------
void __fastcall TfAdjuntos::ExtraerEnClick(TObject *Sender)
{
SaveDialog1->FileName=fProyectos->tbAdjuntos->FieldByName("Nombre")->AsString;
SaveDialog1->DefaultExt=fProyectos->tbAdjuntos->FieldByName("Ext")->AsString;
SaveDialog1->Filter="|*"+fProyectos->tbAdjuntos->FieldByName("Ext")->AsString;
if(SaveDialog1->Execute())
static_cast<TBlobField *>
(fProyectos->tbAdjuntos->FieldByName("Contenido"))->SaveToFile(SaveDialog1->FileName);
}
//---------------------------------------------------------------------------
void __fastcall TfAdjuntos::ExtraerEjecutarClick(TObject *Sender)
{
String MiRuta=ExtractFilePath(Application->ExeName);
if(!DirectoryExists(MiRuta+"Temp"))
CreateDir(MiRuta+"Temp");
static_cast<TBlobField *>
(fProyectos->tbAdjuntos->FieldByName("Contenido"))->
SaveToFile((MiRuta+"Temp\\"+fProyectos->tbAdjuntos->FieldByName("Nombre")->AsString));
String Archivo=MiRuta+"Temp\\"+
fProyectos->tbAdjuntos->FieldByName("Nombre")->AsString;
ShellExecute(Handle,"open",Archivo.c_str(), "", "", SW_MAXIMIZE);
}
//--------------------------------------------------------------------------- |
Tal vez desees que una vez ejecutado y modificado sea reintegrado a la BD aqui esta el codigo para ello, falta hacer el codigo para limpiar la carpeta Temp de los archivos ejecutados y no guardados.
| Código: | //---------------------------------------------------------------------------
void __fastcall TfAdjuntos::GuardarModificadoClick(TObject *Sender)
{
fProyectos->tbAdjuntos->First();
while(!fProyectos->tbAdjuntos->Eof)
{
String MiRuta=ExtractFilePath(Application->ExeName);
String Archivo=MiRuta+"Temp\\"+fProyectos->tbAdjuntos->FieldByName("Nombre")->AsString;
if(FileExists(Archivo))
{
fProyectos->tbAdjuntos->Edit();
static_cast<TBlobField *>
(fProyectos->tbAdjuntos->FieldByName("Contenido"))->LoadFromFile(Archivo);
fProyectos->tbAdjuntos->FieldByName("Nombre")->AsString=ExtractFileName(Archivo);
fProyectos->tbAdjuntos->FieldByName("Ext")->AsString=
ExtractFileExt(Archivo);
fProyectos->tbAdjuntos->Post();
DeleteFile(Archivo);
}
fProyectos->tbAdjuntos->Next();
}
}
//--------------------------------------------------------------------------- |
|
|
| Volver arriba |
|
 |
Fernando Diaz Master


Registrado: 18 Jul 2004Mensajes: 273Ubicación: Talavera de la Reina (Toledo)
|
Publicado: Sab 12 Feb, 2005 10:25 am Asunto: |
|
|
Pasalo por sockets...abres el archivo en modo binario lees x bytes se los envias el otro al recibirlos envia un texto que diga ya me ha llegado, y el servidor continua el bucle asta que envie acabado, si quieres barras de progreso, envia antes el tamaño del fichero, y si quieres que compruebe si lo que yega llega bien, que el cliente lo vuelva a enviar y el servidor compruebe que es =, si quieres un ejemplo te le puedo enviar, pero no comprueba errores....ami me funciona bien _________________ Los problemas mas dificiles tienen las soluciones mas sencillas
 |
|
| Volver arriba |
|
 |
MAC Lt

Registrado: 11 Ago 2002Mensajes: 77
|
Publicado: Sab 12 Feb, 2005 4:00 pm Asunto: |
|
|
Saludos Fernando te agradeceria mucho si me puedes enviar a mi tambien el ejemplo, ya que estoy creando una aplicacion similar a la de titipower y necesito enviar archivos atraves de TCP/IP mi correo es:
macbuilderprog@hotmail.com |
|
| Volver arriba |
|
 |
titipower Ens

Registrado: 27 Nov 2002Mensajes: 39Ubicación: España
|
Publicado: Sab 12 Feb, 2005 5:16 pm Asunto: |
|
|
Enviamelo para verlo, Fernando. Correo: titipower1@yahoo.es
Gracias a todos .... |
|
| Volver arriba |
|
 |
Fernando Diaz Master


Registrado: 18 Jul 2004Mensajes: 273Ubicación: Talavera de la Reina (Toledo)
|
|
| Volver arriba |
|
 |
XyVy Master


Registrado: 25 Ago 2002Mensajes: 557Ubicación: Murcia (España)
|
Publicado: Dom 13 Feb, 2005 12:41 am Asunto: |
|
|
Yo solo escribo para apuntar que si hay un Servidor de Base de Datos, por supuesto depende de lo que se quiera hacer, pero creo que la solución dada por Alfredo es la idonea para el problema que se presenta, es decir, si los archivos deben pertenecer a la BD, lo mejor es introducirlos directamente en la BD Interbase, comunicadonse directamente con el SGBD, así te evitas mil historias.
Repito que creo que la solución de Alfredo me parece la más idonea, si creo haber entendido bien el problema que se plantea.
ciao. _________________ OJO!! Ya tenemos subforo de Bases de Datos!!
Gracias a los admins. |
|
| Volver arriba |
|
 |
|
|
No puedes publicar temas nuevos en este foro No puedes responder a temas en este foro No puedes editar tus mensajes en este foro No puedes borrar tus mensajes en este foro No puedes votar en las encuestas de este foro
|
© 2002–2026 Club Builder · Funciona con phpBB.
|