Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Desarrollo en Delphi para Android (https://www.clubdelphi.com/foros/forumdisplay.php?f=57)
-   -   Descargar video de FTP Firemonkey (https://www.clubdelphi.com/foros/showthread.php?t=93987)

Diego E. 10-06-2019 02:42:38

Descargar video de FTP Firemonkey
 
Hola amigos, estoy explorando un tema nuevo para mí que es bajar archivos de un ftp y me encontré con algunos problemas, espero me puedan ayudar.

Estoy realizando una aplicación que requiere mostrar o en su defecto descargar un video .dav de un ftp, ya estuve leyendo algo de información por internet y probando algunos códigos, y aunque en windows funciona al menos un método, al probar con el celular no tengo la misma suerte.

Anexo los códigos(Aportaciones de foristas) de los que me apoye:

Con el siguiente código intentaba abrir la dirección con la forma 'ftp://xxx.xxx.xxx.x/...video.dav', pero al ejecutarlo en el celular me arroja el siguiente mensaje: 'android.content.ActivityNotFoundException: No Activity found to handle Intent {act=android.intent.action.VIEW dat=ftp://xxx.xxx.xxx.x/...}' que supongo yo, se debe a que no inicia con la extensión 'http://' ya que probé abriendo http://www.google.com y si funciona

Código:

Procedure AbrirURLEnChrome(Dir:String);
var  Intent: JIntent;
begin
  Intent := TJIntent.Create;
  Intent.setAction(TJIntent.JavaClass.ACTION_VIEW);
  Intent.setData(StrToJURI(Dir));
  SharedActivity.startActivity(Intent);
end;

También probé con el clásico Web Browser, sin embargo dicho componente agrega la extensión http:// antes de mi ftp://..., con lo cual ya no encuentra la dirección y no se si se puede quitar el que se agregue dicha extensión por si sola

Código:

WebBrowser1.Navigate(Dir);
Finalmente probé con:

Código:

Procedure BajarDeFTP();
var
  filename : String;
  idFTP1 : TidFTP;
  FS : TMemoryStream;
  sPath :String;

begin
  FileName := '/video.dav';
  sPath := TPath.Combine(TPath.GetDocumentsPath, 'video.dav');

  IdFTP1 := TidFTP.Create(Nil);
  IdFTP1.Host := 'xxx.xxx.xxx.x';
  IdFTP1.Username := '***';
  IdFTP1.Password := '***';
  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;

Cuyo resultado al parecer es positivo ya que no me arroja una excepción en un try que agregué, pero al buscar el archivo no logro encontrarlo en mi teléfono.

Después de tanto choro, viene la pregunta, alguno sabe como puedo descargar dicho video(método nuevo o usando alguno de los métodos anteriores) del ftp o mejor aún, mostrarlo directamente en la app(tomando en cuenta que el formato es .dav). Gracias por su ayuda.

Casimiro Notevi 10-06-2019 09:55:02

Lo descargado estará en: TPath.GetDocumentsPath

Diego E. 10-06-2019 16:54:07

Hola Casimiro, antes que nada gracias por responder.
Te comento que revisé la dirección como sugeriste y no hay ningún archivo en la ubicación, adicional a eso debo comentar que al debuguear, justo en la línea

Código:

IdFTP1.Get(FileName, FS);
Manda el siguiente mensaje: raised exception class EIdConnClosedGracefully with message 'Connection Closed Gracefully.'

Pero dicha excepción no la está atrapando el try, pero si está evitando que se descargue el archivo, hace algunos meses notamos un error similar que relacionamos con la conexión a internet por medio de datos en una zona con poca recepción y que la potencia del servidor que tenía la BD era poca, sin embargo en ésta ocasión se están haciendo las pruebas en una oficina con buena calidad de señal de wifi y el servidor del ftp no es nuestro, entonces no hay mucho que podamos hacer por ese camino, ¿saben como se puede solucionar dicho problema?

Casimiro Notevi 10-06-2019 16:58:49

Es que realmente no tenemos ninguna información para poder ayudarte.
Así que divide y vencerás. Empieza por el ftp, descarga un ficherito pequeño. Si funciona bien entonces prueba con un fichero más grande o con alguno de los que necesitas descargar. Si va bien, entonces no es problema del código.
En cuanto a la señal que se corte o algo así, eso sí es un problema.
Lo del servidor con poca potencia eso no tiene importancia alguna.


La franja horaria es GMT +2. Ahora son las 13:48:11.

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