gpt4 book ai didi

Delphi XE2 DataSnap - 通过 TStream 将 JPEG 文件从服务器流式传输到客户端

转载 作者:行者123 更新时间:2023-12-02 11:20:09 59 4
gpt4 key购买 nike

我编写了一个 DataSnap 服务器方法,它返回一个 TStream 对象来传输文件。客户端应用程序调用该方法并读取流来下载文件。服务器方法非常简单:

function TServerMethods.DownloadFile(sFilePath: string): TStream;
var
strFileStream: TFileStream;
begin
strFileStream := TFileStream.Create(sFilePath, fmOpenRead);
Result := strFileStream;
end;

下载多种文件类型(PDF、GIF、BMP、ZIP、EXE)时效果很好,但下载 JPG 文件时则不起作用。在客户端,从方法调用返回的流对象的大小始终为 0(对于 JPG)。我可以在我的 PC 上本地成功流式传输 JPG 文件,所以这一定与 DataSnap 有关。我做了一些研究,表明 DataSnap 在幕后将流转换为 JSON,当涉及到 JPG 文件时可能会出现问题 - 有人能证实这一点吗?在客户端,我使用 TDSRESTConnection 来调用服务器方法。我意识到我可以在流式传输之前压缩 JPG 文件,但我宁愿不必这样做。

最佳答案

我想更新我尝试解决这个问题的帖子。我从未找到使用 TStream 通过 DataSnap 传输 JPEG 文件的方法,但通过将流转换为 TJSONArray 并将其传回来实现。所以我的服务器方法现在如下所示:

function TServerMethods.DownloadJPEGFile(sFilePath: string): TJSONArray;
var
strFileStream: TFileStream;
begin
strFileStream := TFileStream.Create(sFilePath, fmOpenRead);
Result := TDBXJSONTools.StreamToJSON(strFileStream, 0, strFileStream.Size);
end;

然后在客户端我将其转换回 TStream:

strFileStream := TDBXJSONTools.JSONToStream(JSONArray);

我将其创建为纯粹用于下载 JPEG 的新服务器方法调用,因为我发现使用 TJSONArray 而不是 TStream 传输文件的速度要慢 4 倍,因此我将原始方法用于所有其他文件类型.

关于Delphi XE2 DataSnap - 通过 TStream 将 JPEG 文件从服务器流式传输到客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9127908/

59 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com