2

你可以传入多大的 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;
4

1 回答 1

4

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

这个成功编码然后解码一个 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);
于 2013-04-10T21:05:48.640 回答