ファイルを転送するために TStream オブジェクトを返す DataSnap サーバー メソッドを作成しました。クライアント アプリケーションはメソッドを呼び出し、ストリームを読み取ってファイルをダウンロードします。サーバー メソッドは非常に単純です。
function TServerMethods.DownloadFile(sFilePath: string): TStream;
var
strFileStream: TFileStream;
begin
strFileStream := TFileStream.Create(sFilePath, fmOpenRead);
Result := strFileStream;
end;
多くの種類のファイル (PDF、GIF、BMP、ZIP、EXE) のダウンロードには問題なく機能しますが、JPG ファイルのダウンロードには機能しません。クライアント側では、メソッド呼び出しから返されるストリーム オブジェクトのサイズは、JPG では常に 0 です。PC でローカルに JPG ファイルを正常にストリーミングできるので、DataSnap と関係があるに違いありません。DataSnap がバックグラウンドでストリームを JSON に変換することを示唆するいくつかの調査を行いましたが、JPG ファイルに関してはこれに問題がある可能性があります - 誰でもこれを確認できますか? クライアント側では、TDSRESTConnection を使用してサーバー メソッドを呼び出しています。ストリーミングの前に JPG ファイルを ZIP できることはわかっていますが、そうする必要はありません。