![]() |
Datasnap File Upload
Hallo,
ich sitze in der Arbeit an einer Client/Server Anwendung die wir mit Datasnap realisieren. Sonst lief auch alles, nur seit heute bekomme ich beim Upload einer Datei eine Exception. Über einen TOpenDialog wählt man eine Datei. Die wird mit Pfad in eine Listbox eingetragen (lbFiles). Hier der Client:
Delphi-Quellcode:
aFileStream: TFileStream;
Delphi-Quellcode:
Die Exception:
for i := 0 to lbFiles.Items.Count - 1 do
begin aFileStream := TFileStream.Create(lbFiles.Items[i], fmOpenRead); if aClient.UploadFile(aFileStream, Store, ExtractFileName(lbFiles.Items[i])) then // Hier exception! begin Konsole.TextHinweis(ExtractFileName(lbFiles.Items[i]) + ' gesendet!'); end; end; Exception-Klasse TDBXError mit Meldung 'Remote-Fehler: Ungültiger Dateiname - %s'. Der Server:
Delphi-Quellcode:
Ich verstehe nicht wo der Fehler liegt, weil gestern noch alles lief...
const
BufferSize = 1024; var aFileStream: TFileStream; Buffer: TBytes; BytesReadCount: Integer; Success: boolean; begin Success := false; if not DirectoryExists(ExtractFilePath(ParamStr(0)) + 'Files\') then begin MkDir(ExtractFilePath(ParamStr(0)) + 'Files\' + Store); end; try if FileExists(Name) then begin DeleteFile(Name); end; aFileStream := TFileStream.Create(ExtractFilePath(ParamStr(0)) + 'Files\' + Name, fmCreate); SetLength(Buffer, BufferSize); repeat BytesReadCount := str.Read(Buffer[0], BufferSize); if (BytesReadCount > 0) then aFileStream.Write(Buffer[0], BytesReadCount); until (BytesReadCount < BufferSize); str.Position := 0; Success := True; finally aFileStream.Free; SetLength(Buffer, 0); end; Result := Success; end; Hat wer eine Idee? |
AW: Datasnap File Upload
In der Listbox steht übrigens der richtige Pfad mit der richtigen Datei. Store und Name sind nur für den Server und soweit ich das sehe auch nicht das Problem.
|
AW: Datasnap File Upload
Einzig ungewöhlich finde ich den Parameter "Name"
|
AW: Datasnap File Upload
Jupp, wo "Name" doch ein beliebtes property in allen VCL-Komponenten ist.
Zitat:
Mit Pfad, ohne Pfad, Pfad mit Store oder Pfad ohne Store?
Delphi-Quellcode:
PS: Daß die DP Name fett darstellt, sollte dir schon zu Denken geben. :angle2:
ExtractFilePath(ParamStr(0)) + 'Files\' + Store
Name ExtractFilePath(ParamStr(0)) + 'Files\' + Name |
AW: Datasnap File Upload
Ja stimmt mit Name und habe ich (VNC sei dank) auch gleich geändert aber der Fehler kommt nach wie vor am Client.
Ist Store '00000' dann wird die Datei im Ordner Files gespeichert, ist sie anders (z.B. 52125) dann wird der Ordner 52125 in Files angelegt und die Datei dort gespeichert. Der Server liefert auch kein False zurück, bis dahin kommt er garnicht. ...hab es jetzt gefunden... der Fehler war das ich auf Files geprüft habe aber dann immer Files\00000 anlegen wollte. nenene Ne das war es doch nicht... |
AW: Datasnap File Upload
Hier mal die Upload Methode
Delphi-Quellcode:
Vielleicht hilft es ja :cry:
function TServerMethodsClient.UploadFile(str: TStream; Store: string; fName: string): Boolean;
begin if FUploadFileCommand = nil then begin FUploadFileCommand := FDBXConnection.CreateCommand; FUploadFileCommand.CommandType := TDBXCommandTypes.DSServerMethod; FUploadFileCommand.Text := 'TServerMethods.UploadFile'; FUploadFileCommand.Prepare; end; FUploadFileCommand.Parameters[0].Value.SetStream(str, FInstanceOwner); FUploadFileCommand.Parameters[1].Value.SetWideString(Store); FUploadFileCommand.Parameters[2].Value.SetWideString(fName); FUploadFileCommand.ExecuteUpdate; // Genau hier gibt es dann die Exception Result := FUploadFileCommand.Parameters[3].Value.GetBoolean; end; |
AW: Datasnap File Upload
Zitat:
|
AW: Datasnap File Upload
Zitat:
|
AW: Datasnap File Upload
Jo, dann hab ich das wohl falsch interpretiert, ich hab auch ehrlich gesagt keinen Plan von DataSnap.
|
AW: Datasnap File Upload
Delphi-Quellcode:
Beschreibung:
var
aFileStream: TFileStream; Buffer: array[1..16*1024] of Byte; // 16 KB BytesReadCount: Integer; begin if not DirectoryExists(ExtractFilePath(ParamStr(0)) + 'Files') then MkDir(ExtractFilePath(ParamStr(0)) + 'Files\' + Store); aFileStream := TFileStream.Create(ExtractFilePath(ParamStr(0)) + 'Files\' + FileName, fmCreate); try repeat BytesReadCount := str.Read(Buffer, SizeOf(Buffer)); aFileStream.Write(Buffer, BytesReadCount); until BytesReadCount < SizeOf(Buffer); finally aFileStream.Free; end; end;
PS: Sollte die Datei im Store-Pfad liegen, oder hab ich das falsch verstanden? Wenn ja, dann muß "Store" natürlich noch mit in den Pfad des TFileStream.Create aufgenommen werden. Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:36 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz