EncdDecd对DecodeBase64有限制吗?

时间:2013-04-10 20:49:22

标签: delphi delphi-xe2

您可以传入的Base64字符串的大小有限制吗?

我正在使用以下内容,当我的图像被创建时,它缺少底部的一部分。我看到BufferLen是~44000,而DecodeBase64返回的是一个大约24000个项目的数组。

BufferLen := (Length(JVal) * 4) div 3;
SetLength(PtrB, BufferLen);
PtrB := DecodeBase64(AnsiString(JVal));

JStream := TStringStream.Create(PtrB);
Jpeg := TJPEGImage.Create;
Jpeg.LoadFromStream(JStream);
Self.JPG := Jpeg;

1 个答案:

答案 0 :(得分:4)

Soap.EncdDecd单元中的代码没有大小限制,超出了使用AnsiString数据类型所强加的代码。

这个成功编码然后解码100MB字符串的程序证明了这一点:

{$APPTYPE CONSOLE}

uses
  Soap.EncdDecd;

var
  i: Integer;
  plain, encoded: string;

begin
  SetLength(plain, 100*1024*1024);
  for i := 1 to Length(plain) do
    plain[i] := Chr(32+Random(80));
  encoded := EncodeString(plain);
  if plain=DecodeString(encoded) then
    Writeln('passed')
  else
    Writeln('failed');
  Readln;
end.

您的问题几乎肯定在于您的代码,而不是EncdDecd单元。

您的代码可能会更简单一些。例如:

JStream := TBytesStream.Create(DecodeBase64(JVal));
Jpeg := TJPEGImage.Create;
Jpeg.LoadFromStream(JStream);