Hola a todos compañeros del foro.
Les comparto las siguientes funciones para que las utilicen como mejor les convenga.
Código Delphi
[-]function FileToBase64(aFilePath: string): string;
var
FileStream: TFileStream;
Encoding: TNetEncoding;
Buffer: TBytes;
begin
FileStream := TFileStream.Create(aFilePath, fmOpenRead);
Encoding := TNetEncoding.Base64;
try
try
SetLength(Buffer, FileStream.Size);
FileStream.ReadBuffer(Buffer[0], FileStream.Size);
Result := Encoding.EncodeBytesToString(Buffer);
except
Result:= string.Empty;
end;
finally
FreeAndNil(FileStream);
SetLength(Buffer, 0); end;
end;
Código Delphi
[-]function Base64ToFile(Base64String, FilePath: string): boolean;
var
Encoding: TNetEncoding;
DecodedBytes: TBytes;
FileStream: TFileStream;
begin
FileStream := TFileStream.Create(FilePath, fmCreate);
Encoding := TNetEncoding.Base64;
try
try
DecodedBytes := Encoding.DecodeStringToBytes(Base64String);
FileStream.WriteBuffer(DecodedBytes[0], Length(DecodedBytes));
Result:= True;
except on E: exception do
begin
Result:= False;
end;
end;
finally
FreeAndNil(FileStream);
SetLength(DecodedBytes, 0);
end;
end;
Código Delphi
[-]function Base64ToMemoryStream(Base64String: string): TMemoryStream;
var
Encoding: TNetEncoding;
DecodedBytes: TBytes;
FileStream: TFileStream;
begin
Encoding:= TNetEncoding.Base64;
try
try
DecodedBytes:= Encoding.DecodeStringToBytes(Base64String);
Result:= TMemoryStream.Create;
Result.WriteBuffer(DecodedBytes[0], Length(DecodedBytes));
except
Result:= nil;
end;
finally
SetLength(DecodedBytes, 0);
end;
end;
Estas funciones podrían ser de utilidad por ejemplo para enviar archivos mediante aplicaciones Cliente-Servidor, un WS para registro de usuarios con fotos, etc.
El código fue escrito en Delphi 11.3 y probado en Android 13 y Windows 10.
Las unidades que deberán agregar al uses son:
System.NetEncoding y System.IOUtils;
Saludos.