Enregistrement d'une chaîne base64 sur le disque en tant que binaire en utilisant Delphi 2007

StackOverflow https://stackoverflow.com/questions/690475

Question

J'ai une chaîne binaire base64 qui fait partie d'un document XML qui nous est envoyé par un fournisseur 3ème partie, je voudrais pouvoir l'enregistrer dans son format de fichier d'origine (jpg).

En utilisant la réponse acceptée de cette question « enregistrement d'une chaîne de base64 sur le disque en tant que binaire en utilisant php » je peux enregistrer la chaîne en jpg avec peu d'effort, donc je sais que la chaîne est en bonne forme et est un fichier JPG.

Mais comment dois-je faire cela en Delphi 2007?

Recherche sur le net, j'ai trouvé un tutoriel sur la façon de convertir base64 en TByteDynArray et sauver, mais il ne fonctionne pas bien. J'ai aussi joué environ avec IdDecoderMIME d'Indy, mais sans succès.

Est-ce que quelqu'un sait comment faire, ou si je devrais regarder?

Était-ce utile?

La solution

OmniXMLUtils.pas du OmniXML projet contient des fonctions suivantes:

function  Base64Decode(encoded, decoded: TStream): boolean; overload;
function  Base64Decode(const encoded: string; decoded: TStream): boolean; overload;
function  Base64Decode(const encoded: string; var decoded: string): boolean; overload;
function  Base64Decode(const encoded: string): string; overload;
procedure Base64Encode(decoded, encoded: TStream); overload;
procedure Base64Encode(decoded: TStream; var encoded: string); overload;
function  Base64Encode(decoded: TStream): string; overload;
function  Base64Encode(const decoded: string): string; overload;
procedure Base64Encode(const decoded: string; var encoded: string); overload;

Le Base64Decode (string, TStream) devrait faire l'affaire. Pour le paramètre TStream vous pouvez passer TFileStream comme ceci:

procedure SaveBase64ToFile(const encoded, fileName: string);
var
  fs: TFileStream;
begin
  fs := TFileStream.Create(fileName, fmCreate);
  try
    if not Base64Decode(encoded, fs) then
      raise Exception.Create('Invalid data!');
  finally FreeAndNil(fs); end;
end;

Autres conseils

La bibliothèque Direct Internet (Indy) contient des classes dans IdCoderMIME.pas qui prennent en charge l'encodage base64 et sont faciles à utiliser. TIdEncoderMIME et TIdDecoderMIME

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top