Пример работы с потоковым файлом delphi DataSnap 2010 - PullRequest
1 голос
/ 28 июня 2010

Я пытаюсь передать XML-файл с сервера на клиент, используя DataSnap, с помощью ldsandon, я смог загрузить образец с embarcadero, но моя проблема в том, что я не могу его выполнить.

псевдо-программа должна работать таким образом.

клиент запросит у сервера выбранный XML-файл в выпадающем списке. сервер загрузит клиенту выбранный XML-файл обратно в клиент.

Я просто пытаюсь выяснить это с помощью delphi DataSnap, если нет, то я буду использовать synapse или indy для переноса файла, но я нашел Datasnap интересным.

Может ли кто-нибудь помочь мне, если возможно, работает?

Большое спасибо.

Пожалуйста, помогите мне, мне очень нужна ваша помощь .. спасибо и спасибо

Я нашел эту ссылку , но я не мог понять, как преобразовать ее в TFileStream

1 Ответ

0 голосов
/ 04 февраля 2016

// на стороне сервера

function TServerMethods1.GetCDSXML(SQL: String; var FileSize: Integer): TStream;
begin

  QryMisc.Close;
  QryMisc.SQL.Text := SQL;
  CDSMisc.Open;
  Result := TMemoryStream.Create;
  try
    CDSMisc.SaveToStream(Result, dfXML);
    FileSize := Result.Size; // not CDSMisc.DataSize;
    Result.Position := 0; // Seek not implemented in abstract class
  finally
    CDSMisc.Close;
  end;

end;

// на стороне клиента

procedure TClientModule1.PopMiscCDS(SQL: String);
const
   BufSize = $8000;
var
   RetStream: TStream;
   Buffer: PByte;
   MemStream: TMemoryStream;
   BytesRead: Integer;
   FileSize: Integer;
begin
   try
     MemStream := TMemoryStream.Create;
     GetMem(Buffer, BufSize);
     try
       //---------------------------------------------------------
       RetStream := ServerMethods1Client.GetCDSXML(SQL, FileSize);
       //---------------------------------------------------------
       repeat
         BytesRead := RetStream.Read(Pointer(Buffer)^, BufSize);
         if BytesRead > 0 then
           MemStream.WriteBuffer(Pointer(Buffer)^, BytesRead);
       until BytesRead < BufSize;

       if FileSize <> MemStream.Size then
         raise Exception.Create('Error downloading xml');

       MemStream.Seek(0, TSeekOrigin.soBeginning);
       CDSMisc.Close;
       CDSMisc.LoadFromStream(MemStream);

     finally
       FreeMem(Buffer, BufSize);
       MemStream.Free;
     end;

   except
     on E: Exception do
     begin
        ShowMessage(E.Message);
     end;
   end;

end;
...