Ir para conteúdo
  • Cadastre-se

dev botao

ACBRDownload com o problema do passado


Ver Solução Respondido por Daniel Simoes,
  • Este tópico foi criado há 1465 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Pessoal

Uso D7, estou tentando fazer uso do ACBrDownload, pelo que vi nos posts anteriores, está com o mesmo problema.

Meu ACBr foi atualizado em 18/01/2018

Ele executa rapidinho, cria o arquivo Exemplo:

Arquivo.rar.part

e não executa nada quando ligado a barras de progresso, alem de travar a aplicação.

Testei no ACBrDownload Demo, e dá exatamente o mesmo problema.

alguem já passou por isso ?

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Podemos dizer que o componente ACBrDownload está abandonado... uma vez que seu autor original, a muito tempo não mais participa do Projeto...

Eu já cogitei algumas vezes remover esse componente... e só não o fiz, por motivos de compatibilidade...

Use as classes da Synapse, para fazer Download...

http://www.ararat.cz/synapse/doku.php/public:howto:httpdownload

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

Daniel

obrigado por responder, já imaginava isso, diante de algumas perguntas no forum e sem respostas.

Tudo bem posso tentar usar a Synapse, só tem uma situação.

Até semana passada, meu site estava num provedor HTTP:// ai troquei o provedor e nesse novo, por conta do meu projeto, meu site passará a ficar no modo seguro HTTPS://

Já tentei com o acbrDownload, IdHTTP e ambos me trazem um erro de OIHandler Invalid ISS, algo do tipo. já adicionei o IOHandle mas não tenho conhecimento suficiente para configura-lo, pois, depois de adicionar, o erro passou a ser falta de DLL. Então coloquei na pasta da aplicação as Dlls libeay e ssleay, mas o erro persiste.

Pela synapse eu consigo fazer download usando a URL HTTPS:// ????

Estou usando idFtp pra fazer meus downloads, mas é um saco ficar configurando toda a Ftp, pois tenho várias situações de Downloads dentro da aplicação.

Seria ótimo se o AcbrDownload funcionasse, pois ele tem controle de progresso. (O comentário do Waldir Paim diz que o .RAR está imcompatível, no entanto o aCBRDowload foi feito para efetuar Downloads e não querer descompactar um arquivo .RAR. Não entendo o motivo do erro em relação a incompatibilidade)

Fazer o Download é fácil demais. alguns casos de Downloads rapidos uso UrlDownloadFile, mas também não controle de progresso.

Neste momento estou quebrando a cabeça pra montar uma Função assim:

function DownFTP(aPasta, aOrigem, aDestino:String; aBarra:TProgressBar):Boolean;
Var cpnFtp:TIdFtp;
Begin
  cpnFtp:=TIdFtp.Create(nil);
  With cpnFtp do begin
    Disconnect;
    Host        :=NomeDoHost;
    Port        :=21;
    Username    :=NomeDoUsuario;
    Passive     :=True;
    Password    :=NomeDaSenha;
    OnWorkBegin :=DownFtp1WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer);
    OnWork      :=DownFtp2Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer);
    OnWorkEnd   :=DownFtp3WorkEnd(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer);

    Connect(True);
    if not Connected then begin
      Application.MessageBox('Não foi possível Conectar','Erro',mb_ok+mb_IconError);
      Exit;
    end;
    ChangeDir(aPasta);
    Try
      bytesToTransfer := Size(aOrigem);
      Get(aOrigem,aDestino,True,True);
      Result:=True;
    Except
      On E:Exception do begin
        Result:=false;
        Application.MessageBox(pchar(e.Message),'Erro',mb_ok+mb_IconError);
      end;
    end;
    Disconnect;
  end;
End;

Tá funcionando bonitinha, mas não consigo associar OnWorkBegin, OnWork, OnWorEnd;. Se conseguisse já não dependeria do HTTPS, embora FTP seja um pouco mais lento que HTTP/HTTPS

Praticamente estou escrevendo uma função semelhante ao AcbrDownload kkkk

 

Synapse dá condição de baixar HTTPS ?
Seria mais fácil aprender como associar OnWorkBegin, etc.. ?
Seria possível usar idHTTP vinculado ao Handler e deixar a DLL na pasta da aplicação ?
Qual DLL é essa ? Qual versão ? 

 

Que bom seria se alguém pudesse dar essa força pra nós. Eu adoraria ajudar, mas como já disse, meu conhecimento em componentes é quase nada.

Link para o comentário
Compartilhar em outros sites

Daniel

Obrigado pela dica do HTTPSend. Testei aqui, funciona bonitinho, mas não tem controle de progresso.

Fiz

var
 arquivo:TStringlist;
begin
  with THTTPSend.Create do  begin

    HTTPMethod('GET','https://www.dominio.com.br/pasta/subpastaadmgeral.txt');
    arquivo:=TStringlist.Create;
    arquivo.LoadFromStream(Document);
    arquivo.SaveToFile('d:\delphi\aplicacao\admgeral.txt');
  end;
end;
 

Link para o comentário
Compartilhar em outros sites

Oia eu mais uma vez

Esquece tudo

ACBrDownload Funciona perfeitamente, acho que foi apenas uma confusão no preenchimento das propriedades.

Vou deixar claro aqui

procedure TFormulario.acao_Baixar_SchemasExecute(Sender: TObject);
  Try
    With Baixar do begin
      Protocolo       :=protHTTP;
      DownloadDest    :='c:\pasta_para_destino_do_arquivo_que será_baixado';
      DownloadNomeArq :='nome_do_arquivo_no_site.rar';
      DownloadUrl     :='https://www.dominio.com.br/pasta/subpasta/nome_do_arquivo_no_site.rar';
      StartDownload;
    end;
  Except
    on E:Exception do Begin
      Showmessage('Erro '+e.Message);
      Exit;
    End;
  end;

 

Controle de Progresso (BytesDownloaded deve ser uma variavel Integer Global)

procedure TFormulario.BaixarHookMonitor(Sender: TObject;  const BytesToDownload, BytesDownloaded: Integer;
  const AverageSpeed: Double; const Hour, Min, Sec: Word);
var
  sConnectionInfo: string;
begin
  pb.Position := BytesDownloaded;
  sConnectionInfo := sConnectionInfo + '  -  ' +  Format('%.2d:%.2d:%.2d', [Sec div 3600, (Sec div 60) mod 60, Sec mod 60]);
  sConnectionInfo := FormatFloat('0.00 KB/s'  , AverageSpeed) + sConnectionInfo;
  sConnectionInfo := FormatFloat('###,###,##0', BytesDownloaded / 1024) + ' / ' +  FormatFloat('###,###,##0', BytesToDownload / 1024) +' KB  -  ' + sConnectionInfo;
  lbStatus.Caption := sConnectionInfo;
end;
 

procedure TFormulario.BaixarHookStatus(Sender: TObject;  Reason: THookSocketReason; const BytesToDownload,
  BytesDownloaded: Integer);
begin
  case Reason of
   HR_Connect :
   begin
     Pb.Position := 0;
   end;
   HR_ReadCount :
   begin
     Pb.Max        := BytesToDownload;
     Pb.Position   := BytesDownloaded;
   end;
   HR_SocketClose :
   begin
     case Baixar.DownloadStatus of
       stStop :
       begin
         Pb.Position  := 0;
         lbStatus.Caption := 'Download Encerrado...';
       end;

       stPause :
         lbStatus.Caption := 'Download Pausado...';

       stDownload :
        Begin
        lbStatus.Caption := 'Download Finalizado com Sucesso';
        Pb.Position  := 0;
        Pb.Max    :=0;
        end;
     end;
   end;
  end;
end;
 

A realidade é que a descrição das propriedades não trazem a informação adequada, em DownloadURL eu estava entendendo que deveria ser informado apenas a URL, afinal o nome do arquivo de origem já existe na propriedade DownloadNomeArq 

 

Portanto Caso encerrado.

Peço desculpas por não ter compreendido o funcionamento, uma vez que já havia usado o ACBrDonwload apenas como protFTP.

abraço, boa a noite todos e por hoje chega. ufa Graças a Deus. menos um problema na minha vida.

 

 

 

Editado por marcelonarezzi
  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Fundadores

perfeito... tem um exemplo no site da Synapse:

http://www.ararat.cz/synapse/doku.php/public:howto:ftp_progressbar

A ideia do ACBrDownload seria facilitar essas tarefas... quando tiver um tempo... tento dar uma "garibada",  nele...

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

  • 1 ano depois...

Havia respondido isso em outro tópico, mas resolvi remover de lá e trazer para o local correto caso alguém venha ter o mesmo problema na hora de baixar arquivos via https.

Internamente o componente TACBrDownload utiliza as classes da Synapse para baixar arquivos e eu também tive problemas na hora de baixar arquivos usando HTTPS usando o Demo disponibilizado no repositório. Pesquisando na internet encontrei um exemplo funcional usando a classe THTTPSend da Synapse que é exatamente a mesma usada no TACBrDownload. Toda via usando o Demo não baixava o arquivo, o mais estranho é que ambos usavam o comando HTTP.HTTPMethod('GET', Url);

Comecei a depurar em paralelo para tentar identificar em que momento ocorria a divergência, até que cheguei procedure TTCPBlockSocket.SSLDoConnect da unit blcksock. Quando executava a condição if not FSSL.Connect then o Demo do ACBrDownload ia para a classe TCustomSSL e o exemplo que encontrei na internet (aquele que funcionou) ia para a classe TSSLOpenSSL. Então fui buscar onde o objeto FSSL era criado e o caminho foi o seguinte: constructor THTTPSend.Create  >>  FSock := TTCPBlockSocket.Create;  >>  constructor TTCPBlockSocket.Create; >> CreateWithSSL(SSLImplementation); >> constructor TTCPBlockSocket.CreateWithSSL(SSLPlugin: TSSLClass);  >> FSSL := SSLPlugin.Create(self);
O responsável pelo tipo de objeto a ser criado no FSSL (TCustomSSL/TSSLOpenSSL) é o SSLImplementation que é uma variável global da unit blcksock que é setado inicialmente como TSSLNone. Fiz uma busca em todos os fontes e os únicos lugares aonde essa variável tem seu valor alterado é no initialization de algumas classes, sendo setado como TSSLOpenSSL no initialization da unit ssl_openssl.

Verifiquei que no Demo do componente TACBrDownload não existia referencia a unit ssl_openssl, porém no outro exemplo lá estava ela.

Ou seja, sempre que dar uses na unit ssl_openssl ou utilizar qualquer outra unit que tenha referenciada para a mesma , a variável SSLImplementation será setada para TSSLOpenSSL.

Classes conhecidas que tem a unit ssl_openssl adicionada e sem restrição de diretivas de compilação: ACBrDFeHttpOpenSSL, ACBrMail e ACBrSocket.

 

Em resumo: se for utilizar o componente TACBrDownload ou utilizar direto o THTTPSend  para baixar arquivos via HTTPS tem que dar um uses na unit ssl_openssl.

  • Curtir 3
Link para o comentário
Compartilhar em outros sites

  • Fundadores

Perfeito... é isso mesmo... na Wiki da Synapse eles dão essa dica...

http://www.ararat.cz/synapse/doku.php/public:howto:sslplugin

  • Curtir 2
Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

  • 5 meses depois ...
  • Membros Pro
Em 22/01/2018 at 10:02, Daniel Simoes disse:

Podemos dizer que o componente ACBrDownload está abandonado... uma vez que seu autor original, a muito tempo não mais participa do Projeto...

Eu já cogitei algumas vezes remover esse componente... e só não o fiz, por motivos de compatibilidade...

Use as classes da Synapse, para fazer Download...

http://www.ararat.cz/synapse/doku.php/public:howto:httpdownload

Por favor Daniel, não faça isso. Não remova este componente, ele ajuda muito! 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 1465 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.