您可以传入的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;
答案 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);