Hallo,
ich habe folgendes Problem:
Ich möchte eine TmxJsCollection mit Items vom Typen TCollectionItem von einem Client zum Host (mit Hilfe von TIdTCPServer/Client) als Stream übertragen.
Jedes Item besitzt als published property einen Filename (String) und einmal ImageData (aktuell als TBytes implementiert, habe aber auch schon verschiedene Streams versucht). Der Filename wird einfach zugewiessen und für die Imagedatas benutze ich LoadFromFile.
Delphi-Quellcode:
TMyImage = class(TCollectionItem)
private
FFilename: String;
FImageData: TBytes;
public
constructor Create(ACollection: TCollection); override;
destructor Destroy; override;
procedure Assign(ASource: TPersistent); override;
procedure LoadFromFile(const AFileName: String);
procedure SaveToFile(const AFileName: String);
published
property Filename: String read FFilename write FFilename;
property ImageData: TBytes read FImageData;
end;
procedure TMyImage.LoadFromFile(const AFileName: String);
var
LFileStream: TFileStream;
begin
LFileStream := TFileStream.Create(AFileName, fmOpenRead OR fmShareDenyWrite);
try
SetLength(FImageData, LFileStream.Size);
LFileStream.Read(FImageData[0], Length(FImageData));
finally
LFileStream.Free;
end;
end;
Bis zu dem Punkt wo ich die Collection als Stream speichern will funktioniert alles. Die Collectionitems haben die richtige Größe/Size und die Daten sehen auch gut aus. Nach dem SaveToStream Aufruf allerdings ist die Size des Streams viel zu klein (rund 110-115(als Binary)).
Delphi-Quellcode:
procedure TMyClient.Execute;
var
LStream: TStream;
begin
LStream := TStringStream.Create;
try
FCollection.Binary := True;
FCollection.SaveToStream(LStream);
FClient.Connect;
FClient.IOHandler.Write(LStream, 0, False);
FClient.Disconnect;
finally
LStream.Free;
end;
end;
Wenn ich nur Strings o.Ä. in den Stream speichere funktioniert alles reibungslos, nur die Bilddaten verursachen die Probleme.
Was mache ich falsch? Wie kann ich die Imagedatas in einer Collection zum Host übertragen?
Danke für alle Antworten im Voraus.