2009-03-27 44 views
1

サードパーティのサプライヤから私たちに送信されたXML文書の一部であるBase64バイナリ文字列があります。元のファイル形式(jpg)。Delphi 2007を使用してBase64文字列をバイナリとしてディスクに保存

この質問の回答を使用する"saving a base64 string to disk as a binary using php"文字列をjpgに少しでも保存することができます。文字列が正しい形式であり、JPGファイルであることがわかります。

しかし、これはどのようにDelphi 2007で行いますか?

ネットで見ると、Base64をTByteDynArrayに変換して保存する方法についてのチュートリアルがありましたが、正しく動作しません。私はIndyのIdDecoderMIMEでも演奏しましたが、成功しませんでした。

これを行う方法を知っている人はいますか、探している場所はありますか? OmniXMLプロジェクトから

答えて

7

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:TIdEncoderMIMEとTIdDecoderMIME:

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; 
0

インターネットダイレクト(インディ)ライブラリは、Base64エンコードをサポートし、使いやすいIdCoderMIME.pasのクラスが含まれています。

関連する問題