使用Delphi将大文件转换为base64

时间:2017-04-27 19:44:34

标签: delphi base64 string-conversion

我需要将文件从480mb转换为base64,但我不能。我总是忘记内存消息。有人会有什么建议吗?

function TFormService.LoadFileToBase64(const AFileName: string): String;
var
//  stream: TMemoryStream;
  Encoder: TIdEncoderMIME;
  Base64String: String;
  LStream: TMemoryStream;
begin
  Encoder := TIdEncoderMIME.Create;
  LStream := TMemoryStream.Create;
  try
    LStream.LoadFromFile(AFileName);
    Base64String := Encoder.Encode(LStream);
  finally
    FreeAndNil(Encoder);
    FreeAndNil(LStream);
  end; // try finally


//  stream := TMemoryStream.Create;
//  try
//    stream.LoadFromFile(AFilename);
//    result := EncodeBase64(stream.Memory, stream.Size);
//  finally
//    stream.Free;
//  end;
end;

1 个答案:

答案 0 :(得分:6)

您不应该将整个Base64字符串保存在内存中。编码到Base64的480 MB将产生大约640 M字符,占用大约1.28 GB内存。这在32位应用程序中必然会失败。

最好将编码的字符串写入文件并使用适当的编码器。最近的Delphi版本有 System.NetEncoding

dialog