IdFtp - como Parar e Retomar download?

Delphi

14/02/2008

Tenho uma aplicação que iniciar um download de arquivos no meu FTP, que esta funcionando beleza, utilizando o IdFTP versão 9.

A aplicação funciona perfeitamente, porém necessito criar um tipo de Resume e Pause para o download.
Ex: se o arquivo for um 20 Mb e este com o progresso de 95¬ e a conexão do cliente cair, o mesmo perderá o download, se eu criar um tipo de segurança com Resume e Pause como exemplo posso retomar o downloa de onde parado.

Alguem fez algo parecido?

:)


Rodrigoprado

Rodrigoprado

Curtidas 0

Respostas

Massuda

Massuda

14/02/2008

Nunca fiz, mas acho que é assim que (deveria) funcionar:[list:fecd27fead][*:fecd27fead]Depois de conectar/fazer login no servidor FTP, verifique o valor de TIdFTP.CanResume. Se for True, o servidor permite continuar downloads interrompidos. Note que isso depende exclusivamente do servidor, não há nada que você possa fazer se CanResume for False além de baixar novamente o arquivo desde o começo.[*:fecd27fead]Indique ao chamar TIdFTP.Get que pode continuar o download; isso é feito através do parametro AResume do TIdFTP.Get:
procedure Get(const ASourceFile: string; ADest: TStream; AResume: Boolean); overload;
procedure Get(const ASourceFile: string; const ADestFile: string; const ACanOverwrite: boolean; AResume: Boolean); overload;
[/list:u:fecd27fead]Para parar um download, use TIdFTP.Abort.


GOSTEI 0
Rodrigoprado

Rodrigoprado

14/02/2008

então deixo habilitado pra true na hora de pegar o arquivo, porém durante o download eu devo para o mesmo, mas nao funciona, preciso de um exemplo que funcione mesmo o código...

isso ja havia tentado, mas valeu..


GOSTEI 0
Massuda

Massuda

14/02/2008

então deixo habilitado pra true na hora de pegar o arquivo, porém durante o download eu devo para o mesmo, mas nao funciona
Não depende só do seu programa, depende também do servidor que você está usando. Você verificou se TIdFTP.CanResume está True?

De qualquer forma, se quiser, mostre o código que você está usando.

Outra coisa... Você está usando o Indy que veio com seu Delphi ou você atualizou ele (versão 9.0.18 ou mais recente)?


GOSTEI 0
Paullsoftware

Paullsoftware

14/02/2008

Note que isso depende exclusivamente do servidor, não há nada que você possa fazer se CanResume for False além de baixar novamente o arquivo desde o começo.
Interessante, vou estudar essa possibilidade, antes eu pensava que os gerenciadores guardavam em algum lugar (localmente) essa informação pra poder continuar... vou dar uma pesquisava no assunto, você é o kra Massuda :lol:


GOSTEI 0
Rodrigoprado

Rodrigoprado

14/02/2008

INDY 9.00.10

IdFTP.CanResume é True
ResumeSupported é True
depois de conectado logicamente meu servidor permite copiar.



partindo pela lógica de que o arquivo nao exista no meu destino ainda.
FrmAtualiza.IdFTP.get(arquivo, diretorio, False, True);
uso este método

e paro em 1¬ com o abort.

e para retomar nao ha meios.. ja everti os método para tentar retomar
(arquivo, diretorio, True, True);
(arquivo, diretorio, False, False);
(arquivo, diretorio, False, True);
(arquivo, diretorio, True, False);

supondo que o arquivo tenha 20 mb e parei 1¬ em 512 kb, o mesmo ja deva existir.. no destino logo nao posso sobreescrevelo e sim continuar.

bom talves eu tenha iniciado o get errado ou ao contrário.

Massuda acho que so testando mesmo para termos certeza das propriedades...

quando descobrirmos isso servirar para muitas outras coisas...
:o


GOSTEI 0
Weber

Weber

14/02/2008

Eu uso o idFtp que veio junto do o D7, o resume funciona perfeitamente, basta colocar o componente na tela e mandar fazer o download, não precisa configurar nada, é necessário apenas indicar no .Get que você quer usar o resume.

Talvez seu servidor de internet não de suporte a isto, ja tentou usar um programa de ftp para verificar se o mesmo faz o resume.


GOSTEI 0
Rodrigoprado

Rodrigoprado

14/02/2008

ok, mas então poste ai seu código..

o evento exemplificando qundo inicia o download, ai em seguida quando para e quando reinicia.

vlw

estou testando por localhost, concerteza fiz algo errado, mas nao consego ver onde.


GOSTEI 0
Rodrigoprado

Rodrigoprado

14/02/2008

Iniciar o down:
IdFTP.get(arquivo, diretorio, False, IdFTP.ResumeSupported);

Parar:
IdFTP.Abort;

Reiniciar:
IdFTP.get(arquivo, diretorio, False, IdFTP.ResumeSupported);

É assim que estou utilizando... bom se alguem souber ai o fato eh que nao tenho certeza se o comando de reiniciar eh assim.

Meu servidor permite retormar download.


GOSTEI 0
Weber

Weber

14/02/2008

Acabei de testar, funciona perfeitamente, usando a versão original que veio com o Delphi7

procedure TForm1.Button1Click(Sender: TObject);
begin
  if not IdFTP1.Connected then
    IdFTP1.Connect;
  IdFTP1.Get(´arquivo´,´c:\temp\arquivo´,false,true);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  IdFTP1.Abort;
end;


O servidor tem suporte à resume?
Você diz estar usando localhost, seu servidor FTP local tem suporte à resume?


GOSTEI 0
Rodrigoprado

Rodrigoprado

14/02/2008

tem sim

após conectado eu verifico pelas propriedades

idFTP.CanResume
idFTP.ResumeSupported

as mesmas retornam True;

enfim, partindo desta sua idéia

INICIAR -> IdFTP1.Get(´arquivo´,´c:\temp\arquivo´,false,true);
ABORTAR -> IdFTP1.Abort;

e para REINICIAR seria este mesmo método?
IdFTP1.Get(´arquivo´,´c:\temp\arquivo´,false,true);


GOSTEI 0
Rodrigoprado

Rodrigoprado

14/02/2008

testo pelo LocalHost e tb pelo meu servidor ftp..

ambos tem suporte.


GOSTEI 0
Paullsoftware

Paullsoftware

14/02/2008

testo pelo LocalHost e tb pelo meu servidor ftp.. ambos tem suporte.
você usa que servidor local??? IIS ??? se for, como faço pra habilitar o acesso ao ftp com ele, eu só consigo entrar no localhost assim:

quando digito ftp://localhost

eu vejo normal o site, mais sempre que tento conectar com o IdFtp pra testar umas rotinas de atualização não consigo, sempre da erro de conexão... pode me ajudar? 8)


GOSTEI 0
Rodrigoprado

Rodrigoprado

14/02/2008

estou usando um programa bem simples chamado cezarFTP, pelo iis tb nao consigo testar, sempre depois de alguma atualização do windows meu servidor ftp ou http do IIS nao inicia, digo isso tentando iniciar o próprio serviço no service.msc.

então corri a traz de outro cliente.

vc cria um perfil e em seguida escolhe os diretórios para compartilhar ai funciona na boa, para localhost ou 127.0.0.1.

ou vc pode tentar o apache, infalivel hehe

pow cara to com meu Idftp funcionando mas essa parte de start e pause download.. nao vai velho.......... que droga.. :(


GOSTEI 0
Rodrigoprado

Rodrigoprado

14/02/2008

seria...

ftp://ip/


GOSTEI 0
Paullsoftware

Paullsoftware

14/02/2008

[quote=´rodrigoprado´]
ou vc pode tentar o apache, infalivel hehe
quote]é o apache não dá... tem que ser o IIS mesmo, pois, tenho um Servidor de Aplicação SOAP rodando no servidor e já ta tudo configuradinho e funcionando no IIS... valeu pela dica


GOSTEI 0
Weber

Weber

14/02/2008

e para REINICIAR seria este mesmo método? IdFTP1.Get(´arquivo´,´c:\temp\arquivo´,false,true);


Sim é este o código para reiniciar o download, se não funcionar é porque o servidor não dá suporte.


GOSTEI 0
Rodrigoprado

Rodrigoprado

14/02/2008

NICIAR -> IdFTP1.Get(´arquivo´,´c:\temp\arquivo´,false,true);
ABORTAR -> IdFTP1.Abort;
REINICIAR-> qual o método para reiniciar o download?


while 1<2 do
begin
´não consigo fazer o cod funcionar´
end;


GOSTEI 0
Rodrigoprado

Rodrigoprado

14/02/2008

beleza weber.. vlw..

vou verificar melhor esta parte de do servidor..


GOSTEI 0
Rodrigoprado

Rodrigoprado

14/02/2008

Bom dia a todos,

o servidor que utilizamos eh pela locaweb, liguei la e consultei sobre retomada de download e o atendimento disse que funciona perfeitamente, baixei um programa chamado FDM - Free Download Manager no mesmo configurei para baixar um arquivo do meu ftp e iniciou o download... por este programa ficou mais do que confirmado que o servidor aceita eu parava e reiniciava o download. ok.

Logo o problema esta a minha aplicação.

Bom pessoas, o objetivo do meu programa e atualizar o sistema da minha empresa, caso o mesmo ocorra um erro na atualização durante uns 65¬ por exemplo que nao perca o down e numa proxima ele reconecte e continue de onde parou.

Crie então o gerenciador de atualização, o mesmo conta o tempo, taxa de transferencia e progresso. tudo esta funcionando bem, so preciso do pause e resume.

Código que inicia o download:
IdFTP.get(arquivo, diretorio, False, IdFTP.ResumeSupported);

Código que pausa o mesmo:
IdFTP.Abort;

Código que supostamente devia continuar de onde parado:
IdFTP.get(arquivo, diretorio, False, IdFTP.ResumeSupported);
// pórem não funciona
// logo após aborta e clicar nesta opção o mesmo da a seguinte mensagem de erro:
Transfer aborted.
se eu clicar novamente aparece:
Abort Successful.

e nada acontece... Alguma sugestão caros colegas de programação?


GOSTEI 0
Rodrigoprado

Rodrigoprado

14/02/2008

achei o erro do sistema.

o meu projeto havia um Thread que cuidava de todo o processo tirei entao o codigo de lah e coloquei em um form normal, agora consigo iniciar e pausar, porem quando vou retomar o mesmo, ele inicia do zero, ignorando o arquivo existente.

o mesmo deve retormar de onde parado.


GOSTEI 0
Rodrigoprado

Rodrigoprado

14/02/2008

Bom pessoas consegui resolver o problema, desde já agradedo a todos que colaboram e pela paciência.


GOSTEI 0
Massuda

Massuda

14/02/2008

E qual era o problema?


GOSTEI 0
Rodrigoprado

Rodrigoprado

14/02/2008

Ao retomar o download o mesmo funcionava mas havia um erro no meu gauge que aparentava sempre reiniciar o processo e
quando na verdade funcionava, ajustei o gauge, e tudo funciona perfeitamente agora.


GOSTEI 0
Iavila

Iavila

14/02/2008

Amigo,

De uma olhada neste site
http://localhost/site/index.php?option=com_content&task=category&sectionid=1&id=16&Itemid=2

é o site da GlobalDelphi eles tem uma dica que pode te ajudar a resolver


GOSTEI 0
Intecna

Intecna

14/02/2008

E quando a conexão cai no meio do download, porque o idFTP trava e não desconecta ou aborta sozinho, nem cai para o execpt de um bloco try...except dizendo que deu erro ?


GOSTEI 0
POSTAR