2009-03-27 6 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에 클래스가 포함되어 있습니다.

관련 문제