unit funzioni_base64;
//{$mode objfpc}{$H+}
{$mode delphi}
interface
uses
Classes, SysUtils, base64;
function StreamToBase64(AInputStream: TStream): string;
function Base64ToStream(const ABase64:string; AOutStream: TStream; const AStrict: Boolean=false):Boolean;
function Base64ToFile(const Base64, AFile: String): boolean;
function FileToBase64(const AFile: String): string;
implementation
function StreamToBase64(AInputStream: TStream): string;
var
OutputStream: TStringStream;
Encoder: TBase64EncodingStream;
begin
Result := '';
OutputStream := TStringStream.Create('');
Encoder := TBase64EncodingStream.Create(OutputStream);
try
AInputStream.Position := 0;
Encoder.CopyFrom(AInputStream, AInputStream.Size);
Encoder.Flush;
OutputStream.Position := 0;
Result := OutputStream.DataString;
finally
Encoder.Free;
OutputStream.Free;
end;
end;
function Base64ToStream(const ABase64:string; AOutStream: TStream; const AStrict: Boolean=false):Boolean;
var
InStream : TStringStream;
Decoder : TBase64DecodingStream;
begin
Result := False;
InStream := TStringStream.Create(ABase64);
try
if AStrict then
Decoder := TBase64DecodingStream.Create(InStream, bdmStrict)
else
Decoder := TBase64DecodingStream.Create(InStream, bdmMIME);
try
AOutStream.CopyFrom(Decoder, Decoder.Size);
AOutStream.Position := 0;
Result := True;
finally
Decoder.Free;
end;
finally
InStream.Free;
end;
end;
function Base64ToFile(const Base64, AFile: String): boolean;
var
OutStream: TFileStream;
begin
Result := False;
OutStream := TFileStream.Create(AFile, fmCreate or fmShareExclusive);
try
Base64ToStream(Base64, OutStream);
Result := True;
finally
Outstream.Free;
end;
end;
function FileToBase64(const AFile: String): string;
var
InputStream: TFileStream;
begin
if not FileExists(AFile) then
Exit('');
InputStream := TFileStream.Create(AFile, fmOpenRead or fmShareDenyWrite);
try
Result := StreamToBase64(InputStream);
finally
InputStream.Free;
end;
end;
end.