我需要将文件从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;
答案 0 :(得分:6)
您不应该将整个Base64字符串保存在内存中。编码到Base64的480 MB将产生大约640 M字符,占用大约1.28 GB内存。这在32位应用程序中必然会失败。
最好将编码的字符串写入文件并使用适当的编码器。最近的Delphi版本有 System.NetEncoding :
dialog