1

我有一个 Base64 二进制字符串,它是由第 3 方供应商发送给我们的 XML 文档的一部分,我希望能够将其保存回其原始文件格式 (jpg)。

使用这个问题“使用 php 将 base64 字符串作为二进制文件保存到磁盘”中接受的答案,我可以毫不费力地将字符串保存为 jpg,所以我知道该字符串的格式很好并且是一个 JPG 文件。

但是我如何在 Delphi 2007 中做到这一点?

在网上我找到了一个关于如何将 Base64 转换为 TByteDynArray 的教程,并保存它,但它不能正常工作。我也玩过 Indy 的 IdDecoderMIME,但没有成功。

有谁知道如何做到这一点,或者我应该在哪里寻找?

4

2 回答 2

7

OmniXML项目中的OmniXMLUtils.pas包含以下函数:

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(string, 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;
于 2009-03-27T16:55:11.057 回答
0

Internet Direct (Indy) 库包含 IdCoderMIME.pas 中支持 Base64 编码且易于使用的类:TIdEncoderMIME 和 TIdDecoderMIME。

于 2009-03-27T19:04:30.060 回答