Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Pasar archivo generado al servidor (Internet) protoc TCP/IP

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Pasar archivo generado al servidor (Internet) protoc TCP/IP Responder citando

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? Idea

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

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 Wink
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
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Enviamelo para verlo, Fernando. Correo: titipower1@yahoo.es

Gracias a todos ....
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

http://www.aviarioelpobo.com/shargon/transferencias.rar

El codigo no esta comentado y seguramente no muy depurado, pero funciona
_________________
Los problemas mas dificiles tienen las soluciones mas sencillas
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mostrar mensajes de anteriores:   
Cambiar a:  
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


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.