Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Desarrollo en Delphi para Android
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos


Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-06-2017
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 545
Poder: 17
jhonalone Va por buen camino
[SOLUCIONADO] Bajar/Subir Ficheros desde/a mi web por FTP

Hola de nuevo, amigos del foro.
El problema que me ocupa ahora es el título del hilo. Bueno, los archivos serían fundamentalmente de TEXTO.
Como siempre, antes de pedir vuestra ayuda, llevo varios días buscando en la red.
He encontrado varias referencias, entre ellas una de Neftalí (como no).
Pero no me funcionaron ninguna.

Mi servidor es https. Al intentar las soluciones por TidHTTP no funcionaron. La solución de Neftalí a este problema no supe resolverla.

Prefiero hacerlo por FTP .

He visto varias soluciones con este método, pero (ni replicando el código) he conseguido ni siquiera conectar con mi web.

De todos los ejemplos que he encontrado, me ha parecido el más completo este:

Código Delphi [-]
procedure TForm4.Button1Click(Sender: TObject);
var

filename : String;
Thread : TThread;
idFTP1 : TidFTP;
FS : TMemoryStream;
sPath :String;

begin
   FileName := '/Imagen.jpg';
FileName := '/ImgMaps/2YUxJ.jpg';
Thread := TThread.CreateAnonymousThread(
  procedure
  begin
    IdFTP1.Host := 'xxx.xxx.xxx';
    IdFTP1.Username := 'xxxxxx';
    IdFTP1.Password := 'xxxxx';
    IdFTP1.Passive := True;
    IdFTP1.ConnectTimeout := 60000;
    Fs := TMemoryStream.Create;
    try
      IdFTP1.Connect;
      try
        IdFTP1.TransferType := fsBinary;
        IdFTP1.Get(FileName, FS);
      finally
        IdFTP1.Disconnect;
      end;
      FS.Position := 0;
      TThread.Synchronize(nil,
        procedure
        begin
          Image1.Bitmap.LoadFromStream(FS);
        end
      );
    finally
      Fs.Free;
    end;
  end
);
Thread.OnTerminate := ThreadTerminated;
Thread.Start;
end;

procedure TForm4.ThreadTerminated(Sender: TObject);
begin
  if TThread(Sender).FatalException <> nil then begin
    ShowMessage('Failed')
  end else begin
    ShowMessage('Success');
  end;
end;

Como digo, he intentado replicarlo, CON UNA IMAGEN, aunque esto no es lo que pretendo. Sólo para comprobar si funcionaba, pero no me ha funcionado. Me da el mensaje "Failed".

Buscando errores, y sabiendo que mi web no permite ftp "anónimo" (Lo he comprobado en CuteFTP 9) he intentado probar quitando el TThread y me provoca un "Access Violation" al asignar los valores de acceso al FTP, cuando no están dentro del Thread.
Código Delphi [-]
 IdFTP1.Host := 'xxx.xxx.xxx'; // Lógicamente no es xxx.xxx.xxx sino los valores verdaderos. PROVOCA EL ERROR


Bueno. no quiero aburrir más.
Agradecería información sobre el tema. Está claro que nunca hice nada parecido (y, conociendo mis posibilidades y mi suerte, probablemente no lo haré nunca).

Sigo buscando....

Saludos cordiales.
__________________
"Pedid y se os dará; buscad y hallaréis ..." (Lc 11,9-10)
"...si no tengo caridad, nada soy..." (1 Cor 13,1-13)

Última edición por jhonalone fecha: 22-06-2017 a las 22:01:00.
Responder Con Cita
  #2  
Antiguo 23-06-2017
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por jhonalone Ver Mensaje
El problema que me ocupa ahora es el título del hilo. Bueno, los archivos serían fundamentalmente de TEXTO.
Creo que la opción te FTP te dará menos problemas, aunque por HTTPS debería funcionar.

Cita:
Empezado por jhonalone Ver Mensaje
He encontrado varias referencias, entre ellas una de Neftalí (como no).
Pero no me funcionaron ninguna.
Mi servidor es https. Al intentar las soluciones por TidHTTP no funcionaron. La solución de Neftalí a este problema no supe resolverla.
A saber, es que este tío publica cosas muy raras...

Imagino que has llegado a este enlace:
http://neftali.clubdelphi.com/tidhtt...es-de-una-web/
Al final están las modificaciones para utiliar HTTPS en lugar de HTTP (que era lo que inicialmente usaba el artículo).
Tal y como comento, hay que añadir un nuevo componente TIdSSLIOHandlerSocket. Y revisar bien la versión de la DLL's porque además suelen dar problemas. Hay que encontrar las que funcionan con la versión de las Indy que utilizas y tu sistema operativo.

No comentas que error te da.
Otra opción es que publiques un link (de tu página) con un fichero "de prueba" para que podamos testear la descarga.

Esta otra unit (http://neftali.clubdelphi.com/ejempl...nfoTrackTh.zip) que también puedes encontrar en mi blog, con la explicación completa en la entrada: "Obtener información de una canción" (http://neftali.clubdelphi.com/obtene...de-una-cancin/) hace la descarga de una imagen, pero en este caso por HTTP. Sólo habría que añadirle la parte del componente anteriormente citado (para acceder a HTTPS).

Cita:
Empezado por jhonalone Ver Mensaje
Prefiero hacerlo por FTP .
He visto varias soluciones con este método, pero (ni replicando el código) he conseguido ni siquiera conectar con mi web.
De todos los ejemplos que he encontrado, me ha parecido el más completo este:
Pues por FTP, debería funciona también sin problemas. Usa cualquier ejemplo de conexion a FTP. En los foros seguros que encuentras varios. Empieza por uno que NO UTILICE threads, ya que te será más sencillo de probar.
Revisa que ni el Antivirus ni el Firewall te estén bloqueando.

http://www.clubdelphi.com/foros/show...21&postcount=2
https://www.clubdelphi.com/foros/sho...54&postcount=1
http://www.clubdelphi.com/foros/show...11&postcount=9

Cita:
Empezado por jhonalone Ver Mensaje
Como digo, he intentado replicarlo, CON UNA IMAGEN, aunque esto no es lo que pretendo. Sólo para comprobar si funcionaba, pero no me ha funcionado. Me da el mensaje "Failed".
Buscando errores, y sabiendo que mi web no permite ftp "anónimo" (Lo he comprobado en CuteFTP 9) he intentado probar quitando el TThread y me provoca un "Access Violation" al asignar los valores de acceso al FTP, cuando no están dentro del Thread.
Es raro que sólo te de ese error.
Te recomiendo que pruebes uno de los ejemplos anteriores, y revises lo del bloqueo.
Con los mismos datos que usas con cualquier programa FTP te debería funcionar.

Revisa puerto, modo pasivo,... en general utiliza en el componente las mismas propiedades que en la conexión de tu programa.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 23-06-2017
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 545
Poder: 17
jhonalone Va por buen camino
Lo primero, muchas gracias. Neftalí.

El error "Failed" está en el código de arriba. Como comprobación del resultado del Thread.

El error que da cuando intento asignar los valores a TidFTP.Host (o cualquier otro) es el desagradable "Access violation..."

He revisado los links que me dejaste. Básicamente es el mismo código que yo uso, pero sin el Thread.

Veo que todos los ejemplos están orientados a Windows y creo que no dije (quizá lo dí por sentado al hacer la publicación en el foro de Android), no dije que la descarga la intento hacer desde un dispositivo Android. Mis disculpas.

Me he dado cuenta cuando Neftalí se refería al firewall.

De todos modos, voy a probarlo desde Windows y os cuento.

Aunque quede claro que mi necesidad es para Android.

Saludos cordiales.
__________________
"Pedid y se os dará; buscad y hallaréis ..." (Lc 11,9-10)
"...si no tengo caridad, nada soy..." (1 Cor 13,1-13)
Responder Con Cita
  #4  
Antiguo 23-06-2017
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por jhonalone Ver Mensaje
Veo que todos los ejemplos están orientados a Windows y creo que no dije (quizá lo dí por sentado al hacer la publicación en el foro de Android), no dije que la descarga la intento hacer desde un dispositivo Android.
Error mio, por no fijarme en el foro.
En este caso i recomendación va por otro lado.

En esta aplicación del último concurso de Embarcadero (http://neftali.clubdelphi.com/funwit...a-foto-del-da/) tienes el código fuente de cómo descargar una imagen desde un HTTPS.
Que es lo que hare la aplicación para cada foto diaria.
En ese caso también se utiliza un Thread, pero funciona en Android.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #5  
Antiguo 23-06-2017
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 545
Poder: 17
jhonalone Va por buen camino
¡¡Maravilloso...! Neftali.
El vídeo y el código.
Si no ganaste el concurso, por lo menos mereces un premio.

Da gusto ver tu código tan ordenadito y tan hipermegacomentado.

Llegué hasta aqui...
Código Delphi [-]
procedure TFrameImagen.DescargarImagen(ABitmapND:TBitmap; pForceDownload:boolean=False);
var
  pathImages, fMini:string;
  URI:TidURI;
  LSart:Int64;
begin


Pero me pierdo. Es demasiado para mí...

Yo necesito cosas más simples... (no llego a tanto)

Sabes que mi idea es hacerlo por FTP para evitar entradas no deseadas sobre todo.

Agradezco tu buena voluntad.
Seguiré buscando una solución.

Saludos ¡Genio!
__________________
"Pedid y se os dará; buscad y hallaréis ..." (Lc 11,9-10)
"...si no tengo caridad, nada soy..." (1 Cor 13,1-13)
Responder Con Cita
  #6  
Antiguo 24-06-2017
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 545
Poder: 17
jhonalone Va por buen camino
Hola a todos.

En contra de la extendida costumbre en este foro de comentar, "gracias a todos, pero ya he resuelto el problema" y no dejar constancia de la solución que se ha utilizado, yo no comulgo con ésa idea y, cuando resuelvo algo, bien o mal, me gusta compartir el resultado, por si puede ser útil a otro visitante que tenga el mismo problema.

Os dejo la solución que me ha funcionado a mí:
Código Delphi [-]

unit Unit4;

interface

uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,
FMX.Controls.Presentation, IdFTP,  IdFTPCommon, FMX.Objects, IOUtils;

type
TForm4 = class(TForm)
       Button1: TButton;
       Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form4: TForm4;

implementation

{$R *.fmx}

procedure TForm4.Button2Click(Sender: TObject);
var
F : TextFile;
sPath :String;
S : String;
begin
    sPath := TPath.Combine(TPath.GetDocumentsPath, 'Prueba.txt');
    AssignFile(F,sPath);
    Reset(F);                                                                             
    ReadLn(F,S);
       ShowMessage(S);
    CloseFile(F);
end;

procedure TForm4.Button1Click(Sender: TObject);
var
filename : String;
idFTP1 : TidFTP;
FS : TMemoryStream;
sPath :String;
begin
   FileName := '/Prueba.txt';
    sPath := TPath.Combine(TPath.GetDocumentsPath, 'Prueba.txt');
    IdFTP1 := TidFTP.Create(Nil);
    IdFTP1.Host := 'ftp.xxxxxx.com';
    IdFTP1.Username := 'xxxxxxxxxxx';
    IdFTP1.Password := 'xxxxxxxxxxxx';
    IdFTP1.Passive := True;
    IdFTP1.ConnectTimeout := 6000;
    Fs := TMemoryStream.Create;
    try
      IdFTP1.Connect;
      try
        IdFTP1.TransferType := ftBinary;
        IdFTP1.Get(FileName, FS);
        FS.Position := 0;
        FS.SaveToFile(sPATH);
      finally
        IdFTP1.Disconnect;
      end;

    finally
      Fs.Free;
    end;
 //if FileExists(sPath) then   ShowMessage('Existe');
 end;
end.

Saludos a todos.
__________________
"Pedid y se os dará; buscad y hallaréis ..." (Lc 11,9-10)
"...si no tengo caridad, nada soy..." (1 Cor 13,1-13)
Responder Con Cita
  #7  
Antiguo 26-06-2017
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por jhonalone Ver Mensaje
El vídeo y el código.
Si no ganaste el concurso, por lo menos mereces un premio.
Pues sí lo gané , aunque todavía estoy esperando el premio...
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #8  
Antiguo 26-06-2017
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por jhonalone Ver Mensaje
Os dejo la solución que me ha funcionado a mí
Gracias.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #9  
Antiguo 26-06-2017
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 545
Poder: 17
jhonalone Va por buen camino
¡¡Enhorabuena, Neftalí!!
Hubiera sido injusto que no lo ganaras. Lo merecías.
Un saludo.
__________________
"Pedid y se os dará; buscad y hallaréis ..." (Lc 11,9-10)
"...si no tengo caridad, nada soy..." (1 Cor 13,1-13)
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Para bajar y subir informacion luchifer Varios 3 01-11-2012 06:15:41
Bajar un archivo de mi alojamiento desde delphi xio Internet 5 22-01-2008 21:14:20
error al subir archivos desde php cahosoft PHP 1 13-12-2005 15:00:30
Como subir el volumen desde Builder? JuanErasmo C++ Builder 0 17-11-2005 23:01:31
subir y bajar volumen desde una aplicacion gulder API de Windows 1 24-04-2005 22:04:41


La franja horaria es GMT +2. Ahora son las 10:37:17.


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