【发布时间】:2017-09-25 18:33:24
【问题描述】:
我需要将文件从 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;
【问题讨论】:
-
使用 TFilestream 代替 TMemorystream...
-
ty,但没有解决。 [链接]paste.ofcode.org/HTkqhJyu8bUPb4ESU8VEH7 [/链接]
-
尝试 LStream.Position := 0;在 LoadFromFile 之后。
-
同样的问题。内存不足
-
@William 生成的 base64 字符串在 D2007 及更早版本中为 573MB,在 D2009 及更高版本中为 1GB。字符串限制为 MaxInt(约 20 亿)个最大字符或可用内存,以较小者为准。但也要记住,数据首先被编码为一个中间字节数组,因此在准备最终字符串时还有另外 573MB 正在使用。
标签: delphi base64 string-conversion