Сохранение строки Base64 на диск в виде двоичного файла с использованием Delphi 2007 - PullRequest
1 голос
/ 27 марта 2009

У меня есть двоичная строка Base64, которая является частью XML-документа, отправляемого нам сторонним поставщиком, я хотел бы иметь возможность сохранить его в исходном формате (jpg).

Используя принятый ответ на этот вопрос "сохранение строки base64 на диск в виде двоичного файла с использованием php" Я могу сохранить строку в jpg без особых усилий, поэтому я знаю, что строка в хорошем состоянии и является файлом JPG.

Но как мне это сделать в Delphi 2007?

Глядя в сеть, я нашел учебник о том, как преобразовать Base64 в TByteDynArray и сохранить его, но он работает неправильно. Я также играл с Indy IdDecoderMIME, но безуспешно.

Кто-нибудь знает, как это сделать, или где я должен искать?

Ответы [ 2 ]

7 голосов
/ 27 марта 2009

OmniXMLUtils.pas из проекта OmniXML содержит следующие функции:

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;

Base64Decode (строка, TStream) должен сделать свое дело. Для параметра TStream вы можете передать его TFileStream следующим образом:

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;
0 голосов
/ 27 марта 2009

Библиотека Internet Direct (Indy) содержит классы в IdCoderMIME.pas, которые поддерживают кодировку Base64 и просты в использовании: TIdEncoderMIME и TIdDecoderMIME.

...