Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

Postado

Boa tarde. Estou implementando em Delphi7 envio bloco x , sendo que o retorno eh sempre "arquivo zip inválido".

em anexo segue o trecho do fonte, onde por ser Delphi7 , estou zipando o XML com zipmaster e usando o metodo EncodeBase64

alguem pode me orientar o que estou fazendo de errado.

Muito Obrigado.

 

EnvioBlocox.txt

  • Moderadores
Postado
11 minutos atrás, rlind disse:

Boa tarde. Estou implementando em Delphi7 envio bloco x , sendo que o retorno eh sempre "arquivo zip inválido".

em anexo segue o trecho do fonte, onde por ser Delphi7 , estou zipando o XML com zipmaster e usando o metodo EncodeBase64

alguem pode me orientar o que estou fazendo de errado.

Muito Obrigado.

 

EnvioBlocox.txt

Use o método do ACBr

olhe na pasta projetos tem uma aplicação assim lá tu pode olhar o código.

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Transparent-02.png
 

 

Postado

Bom dia. Apos verificar rotinas de envio no  ACBrMonitorPLUS e no ACBrBlocoXSign , ambos não informam "WebServices.enviarBlocoX.XMLZipado" , que eh exatamente onde esta ocorrendo o problema.

Se eu nao estivesse no Delphi 7 , somente passaria o conteudo do arquivo em "WebServices.enviarBlocoX.XML" e o componente ACBRBLOCOX gerava o zip e usava o EncodeBase64.

porem não eh o caso.

segue abaixo trecho do codigo fonte , se alguem puder me dar uma orientação, agradeço

 

       ZipMaster1.ZipFileName:= sNomearqXMLZIPADO ;
       ZipMaster1.FspecArgs.Clear;
       ZipMaster1.FspecArgs.Add(sNomearqXML);
       ZipMaster1.Add;

       WebServices.EnviarBlocoX.Clear;


       FXMLOriginal := TStringList.Create;
       try
          FXMLOriginal.LoadFromFile(sNomearqXML );
          WebServices.EnviarBlocoX.XML := FXMLOriginal.Text;
       finally
          FXMLOriginal.Free;
       end;

       stream := TMemoryStream.Create;
       stream.LoadFromFile(sNomearqXMLZIPADO);

       WebServices.enviarBlocoX.XMLZipado :=  EncodeBase64( ansistring( stream ) {sNomearqXMLZIPADO} );
       WebServices.EnviarBlocoX.Executar;

 

Obrigado.

 

 

  • 7 meses depois ...
Postado

No caso do Delphi 7 o ACBr não está com a função de base64 pronta, para isso eu precisei utilizar a conversão feita pelo Indy e a DLL do 7-Zip e dai informar na propriedade do XMLZipado no ACBr, segue meu exemplo:
 

uses IdCoderMIME;


function Base64Encode(const ArquivoXML: String): String;
var
  Encoder: TIdEncoderMIME;
  FileStream: TMemoryStream;
begin
  Encoder := TIdEncoderMIME.Create(nil);
  FileStream := TMemoryStream.Create;
  FileStream.LoadFromFile(ArquivoXML);
  try
    Result := Encoder.Encode(FileStream);

  finally
    Encoder.Free;
  end;
end;

 

E alimentando a propriedade do ACBr, passando o caminho do Arquivo ZIP:

 

oBlocoX.WebServices.EnviarBlocoX.XMLZipado := Base64Encode('estoque.zip');

 

No meu caso, eu gero o arquivo .XML pelo ACBr e zipo ele utilizando a DLL do 7-Zip, você irá precisar da dll 7zip.dll na pasta do seu executável e um arquivo .pas "sevenzip.pas", caso precisar posso fornecer por email ou um link de download, não sei quanto as políticas do fórum para anexar ela aqui, mas é um componente livre:

 

var ArqZ: I7zOutArchive;

ArqZ := CreateOutArchive(CLSID_CFormatZip);
ArqZ.AddFile('estoque.xml', 'estoque.xml');
SetCompressionLevel(ArqZ, 5);
ArqZ.SaveToFile('estoque.zip');

 

  • Curtir 1
  • Este tópico foi criado há 2186 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.