使用 Delphi 2007 将 Base64 字符串作为二进制文件保存到磁盘
Posted
技术标签:
【中文标题】使用 Delphi 2007 将 Base64 字符串作为二进制文件保存到磁盘【英文标题】:Saving a Base64 string to disk as a binary using Delphi 2007 【发布时间】: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,但没有成功。
有谁知道怎么做,或者我应该去哪里看?
【问题讨论】:
【参考方案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。
【讨论】:
以上是关于使用 Delphi 2007 将 Base64 字符串作为二进制文件保存到磁盘的主要内容,如果未能解决你的问题,请参考以下文章
Delphi 将视频 Base64 字符串转换为视频二进制文件
delphi 10.1 Berlin 中使用自带的 Base64 编码