【问题标题】:Saving a Base64 string to disk as a binary using Delphi 2007使用 Delphi 2007 将 Base64 字符串作为二进制文件保存到磁盘
【发布时间】:2009-03-27 16:32:01
【问题描述】:

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

使用从这个问题"saving a base64 string to disk as a binary using php" 接受的答案,我可以毫不费力地将字符串保存到 jpg,所以我知道字符串的格式很好并且是 JPG 文件。

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

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

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

【问题讨论】:

    标签: web-services delphi base64 delphi-2007


    【解决方案1】:

    来自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;
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2010-10-11
        • 2010-11-10
        • 2015-08-27
        • 2016-12-03
        • 1970-01-01
        • 2013-06-04
        • 2017-04-11
        • 2018-03-26
        • 1970-01-01
        相关资源
        最近更新 更多