Delphi XE2 DataSnap REST - “尝试下载大文件时”出现“内存不足”错误

3
我在Delphi XE2中创建了一个简单的DataSnap REST服务器,并且有一个方法返回TStream对象以传输文件。这很好用,但是当我尝试下载一个大文件(约2.5GB)时,在服务器端会收到一个“内存不足”的错误消息。我想通过Internet浏览器(http://localhost:8080/datasnap/rest/TServerMethods1/GetFile)下载文件。REST服务能够返回大文件吗?我阅读了这个问题并尝试了那个解决方案,当我使用小文件时它运行良好。以下是我的简单代码:
function TServerMethods1.GetFile: TStream;
var
  FileStream: TFileStream;
begin
  FileStream := TFileStream.Create('d:\file.exe', fmOpenRead);
  Result := FileStream;
end;

我该如何通过互联网浏览器从REST服务器下载大文件?


也许你可以让Indy将内容分块提供。 - Arnaud Bouchez
所有体面的HTTP服务器实现都可以在不完全加载响应流到内存中的情况下传输它(据我所知,Indy做得很好,因此不需要分块)。看起来DataSnap REST服务使用了一个较差的实现。 - mjn
1个回答

2
你的函数返回的是一个 TStream,尝试增加你的应用程序内存。如果你正在加载大量数据,应该创建一个能够分块返回结果的函数。关于如何在64位Windows上启用32位Delphi应用程序使用4GB内存(通过Wow64.exe),请参考这里。注意保留HTML标签。

我创建了一个函数,它可以将结果分成更小的块,但在这种情况下(我认为)我只需要使用客户端应用程序(而不是互联网浏览器)。 - greenboy
我将我的应用程序编译成了64位平台,现在它可以正常工作了。谢谢你的回答! - greenboy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接