IdFtp - como Parar e Retomar download?
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?
:)
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
Curtidas 0
Respostas
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:[/list:u:fecd27fead]Para parar um download, use TIdFTP.Abort.
procedure Get(const ASourceFile: string; ADest: TStream; AResume: Boolean); overload; procedure Get(const ASourceFile: string; const ADestFile: string; const ACanOverwrite: boolean; AResume: Boolean); overload;
GOSTEI 0
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..
isso ja havia tentado, mas valeu..
GOSTEI 0
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
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
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
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
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.
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
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.
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
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.
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
14/02/2008
Acabei de testar, funciona perfeitamente, usando a versão original que veio com o Delphi7
O servidor tem suporte à resume?
Você diz estar usando localhost, seu servidor FTP local tem suporte à resume?
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
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);
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
14/02/2008
testo pelo LocalHost e tb pelo meu servidor ftp..
ambos tem suporte.
ambos tem suporte.
GOSTEI 0
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
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.. :(
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
14/02/2008
seria...
ftp://ip/
ftp://ip/
GOSTEI 0
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
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
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
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;
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
14/02/2008
beleza weber.. vlw..
vou verificar melhor esta parte de do servidor..
vou verificar melhor esta parte de do servidor..
GOSTEI 0
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?
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
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.
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
14/02/2008
Bom pessoas consegui resolver o problema, desde já agradedo a todos que colaboram e pela paciência.
GOSTEI 0
Massuda
14/02/2008
E qual era o problema?
GOSTEI 0
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.
quando na verdade funcionava, ajustei o gauge, e tudo funciona perfeitamente agora.
GOSTEI 0
Iavila
14/02/2008
Amigo,
De uma olhada neste site
http://localhost/site/index.php?option=com_content&task=category§ionid=1&id=16&Itemid=2
é o site da GlobalDelphi eles tem uma dica que pode te ajudar a resolver
De uma olhada neste site
http://localhost/site/index.php?option=com_content&task=category§ionid=1&id=16&Itemid=2
é o site da GlobalDelphi eles tem uma dica que pode te ajudar a resolver
GOSTEI 0
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