服务器方法很简单:
function TServerMethods.Despatchdocument(sCompanyID,sDocOurRef: string): TStream;var sSourcefilePath: string; strfileStream: TfileStream;begin sSourcefilePath := GetdocumentpdffilePath(sCompanyID,sDocOurRef); strfileStream := TfileStream.Create(sSourcefilePath,fmOpenRead); Result := strfileStream;end;@R_419_6120@ 这就是我一段时间做的.我用XE并没有机会清理它.
//服务器端:
function TServerMethods1.Downloadfile(out Size: Int64): TStream;begin Result := TfileStream.Create('upload.fil',fmOpenRead or fmShareDenyNone); Size := Result.Size; Result.position := 0;end;
//客户端:
procedure TfMain.Downloadfile(Sender: TObject);var RetStream: TStream; Buffer: PByte; Mem: TMemoryStream; BytesRead: Integer; documentID: Int64; Size: Int64; filename: WIDeString; BufSize: Integer;begin BufSize := 1024; try Mem := TMemoryStream.Create; GetMem( Buffer,BufSize ); try RetStream := FDownloadDS.Downloadfile(Size); RetStream.position := 0; if ( Size <> 0 ) then begin filename := 'download.fil'; repeat BytesRead := RetStream.Read( Pointer( Buffer )^,BufSize ); if ( BytesRead > 0 ) then begin Mem.WriteBuffer( Pointer( Buffer )^,BytesRead ); end; lStatus.Caption := IntToStr( Mem.Size ) + '/' + IntToStr( Size ); Application.ProcessMessages; until ( BytesRead < BufSize ); if ( Size <> Mem.Size ) then begin raise Exception.Create( 'Error downloading file...' ); end; end else begin lStatus.Caption := ''; end; finally FreeMem( Buffer,BufSize ); FreeAndNIl(Mem); end; except on E: Exception do begin lErrorMessage.Caption := PChar( E.Classname + ': ' + E.Message ); end; end;end;
您可以根据需要调整BufSize.我无法获得流的大小,直到我这样做.我尝试使用XE2并没有出现同样的问题,但我上传了.可能有更好的方法来检索流的大小.如果我很快得到答案,我会告诉你……
另一方面 – 我还没想出如何在服务器端显示进度条.我还在努力解决这个问题.
我希望这有帮助!如果您有任何疑问,请告诉我!
总结以上是内存溢出为你收集整理的Delphi XE2 DataSnap – 通过带有进度条的TStream下载文件全部内容,希望文章能够帮你解决Delphi XE2 DataSnap – 通过带有进度条的TStream下载文件所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)