1

サードパーティのサプライヤから送信されたXMLドキュメントの一部であるBase64バイナリ文字列があります。元のファイル形式(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) ライブラリには、Base64 エンコーディングをサポートし、使いやすい IdCoderMIME.pas のクラスが含まれています: TIdEncoderMIME および TIdDecoderMIME。

于 2009-03-27T19:04:30.060 に答える