Delphi XE2 DataSnap - Download-Datei per TStream Mit Fortschrittsbalken
Ich geschrieben habe, ein DataSnap-server-Methode zurückgibt, die ein TStream-Objekt eine Datei zu übertragen. Die client-Anwendung ruft die Methode auf und liest den stream in Ordnung. Mein Problem ist, dass der Methodenaufruf dauert eine Weile, bis Sie abgeschlossen ist, bevor die TStream-Objekt verfügbar ist, zu Lesen, aber auf der server-Seite kann ich sehen, dass der Aufruf der Methode dauert nur eine Sekunde, erstellen Sie das Objekt wieder. Ich hatte gehofft, dass das stream-Objekt zurückgegeben werden sofort, so dass ich Lesen kann das streamen und die Anzeige eines Fortschrittsbalken für den download-Fortschritt. Gibt es einen anderen Weg kann ich das machen?
Server-Methode ist sehr einfach :
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;
- mögliche Duplikate von ProgressBar für TResourceStream (Delphi)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist, wie ich es Tat eine Weile zurück. Ich verwendet, XE und hatte noch keine Gelegenheit, es zu bereinigen.
//Server-Seite:
//Client-Seite:
Können Sie einstellen, BufSize, wie du willst. Ich hatte Mühe, die Größe des Streams, bevor ich es auf diesem Weg. Ich experimentierte mit XE2 und schien nicht das gleiche problem haben, aber ich war hochladen. Es ist wahrscheinlich eine bessere Methode zum abrufen der Größe des Stroms. Wenn ich die Antwort bekommen, bald werde ich Sie wissen lassen....
Auf einer anderen Anmerkung - ich habe noch nicht herausgefunden, wie man eine Statusanzeige auf der server-Seite. Ich bin immer noch versuchen, um dies herauszufinden, auch.
Ich hoffe, das hilft! Lassen Sie mich wissen, wenn Sie irgendwelche Fragen haben!
Froh, dass Sie etwas Glück haben! Das ist die andere fix ich zu tun hatte. Sie können unter diesem link https://forums.embarcadero.com/thread.jspa?threadID=66490&tstart=0
Nach dem Tauchen im code fand ich in "Daten.DBXJSONReflect.pas"
Verfahren TJSONPopulationCustomizer.Vorveröffentlichung(Daten: TObject; rttiContext: TRttiContext);
...
...
Ich denke, es sollte so sein: