使用Delphi 2007将Base64字符串保存为二进制文件

时间:2009-03-27 16:32:01

标签: web-services delphi base64 delphi-2007

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

使用此问题中接受的答案"saving a base64 string to disk as a binary using php"我可以轻松地将字符串保存到jpg,因此我知道字符串格式正确并且是JPG文件。

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

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

有人知道怎么做,或者我应该在哪里看?

2 个答案:

答案 0 :(得分: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(字符串,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;

答案 1 :(得分:0)

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