delphi + indy -> lazarus +synapse
Was verstehst Du denn nicht?ac hat geschrieben:danke,
das habe ich auch schon gesehen aber bin noch nicht ganz durchgestiegen... wie verwende ich diese funktion um mehrere formfields hinzu zu fügen ?
Du kannst doch einfach die FormFields mit Namen und Werten füllen
Feld1=Eins
Feld2=Zwei
Data und FileName kannst du ja wegmachen, wenn du's nicht brauchst.
die formFields habe ich ja schon.
es geht mir darum dass ich einen stream habe und in den die formfields und deren werte reinschreibe. zusätzlich noch ein file. also etwas von synapse dass vergleichbar mit dem TIdMultiPartFormDataStream aus Indy ist.
Mit Indy mache ich (mal grob erklärt) folgendes:
stream.AddFormField(Feld1, Wert1);
stream.AddFormField(Feld2, Wert2);
stream.AddFormField(Feld3, Wert3);
stream.AddFormField(Feld4, Wert4);
stream.AddFile(Feld5, Wert5, Dateityp);
post(url, stream);
Den Stream zum Schluss senden ist kein Problem. Ich frage mich ob es für Synapse einen speziellen stream gibt den man mit FormFields und Files füllen kann.
Wenn Synapse sowas nicht vorgesehen hat, kann man sich irgendwo eine Klasse herunterladen, die das kann? Oder hat jemand eine Idee, wie man so etwas selber bauen kann ?
es geht mir darum dass ich einen stream habe und in den die formfields und deren werte reinschreibe. zusätzlich noch ein file. also etwas von synapse dass vergleichbar mit dem TIdMultiPartFormDataStream aus Indy ist.
Mit Indy mache ich (mal grob erklärt) folgendes:
stream.AddFormField(Feld1, Wert1);
stream.AddFormField(Feld2, Wert2);
stream.AddFormField(Feld3, Wert3);
stream.AddFormField(Feld4, Wert4);
stream.AddFile(Feld5, Wert5, Dateityp);
post(url, stream);
Den Stream zum Schluss senden ist kein Problem. Ich frage mich ob es für Synapse einen speziellen stream gibt den man mit FormFields und Files füllen kann.
Wenn Synapse sowas nicht vorgesehen hat, kann man sich irgendwo eine Klasse herunterladen, die das kann? Oder hat jemand eine Idee, wie man so etwas selber bauen kann ?
Und wo ist jetzt hier der Unterschied zu dem was hierac hat geschrieben: Den Stream zum Schluss senden ist kein Problem. Ich frage mich ob es für Synapse einen speziellen stream gibt den man mit FormFields und Files füllen kann.
http://synapse.ararat.cz/wiki/index.php?page=HtmlForms" onclick="window.open(this.href);return false;
gemacht wird?
Data ist der FileStream und FormFields die Namen und Werte Paare.
So funktioniert's doch:
Die Konstante CRLF muss du noch definieren als #13#10
Code: Alles auswählen
procedure TForm1.Button1Click(Sender: TObject);
var Data:TFileStream;
FormFields:TStrings;
FileName:String;
begin
FileName:='/home/theo/test.zip';
Data:=TFileStream.Create(FileName, fmOpenRead);
FormFields:=TStringList.Create;
FormFields.Add('Feld2=testen');
FormFields.Add('Feld3=sie mit');
HttpPostFileForm('http://localhost/theohome/php/listpost.php',
'Feld1',
ExtractFileName(FileName),
Data,
FormFields,
Memo1.lines);
Data.Free;
FormFields.free;
end;
der unterschied ist, dass es sich bei der Indy komponente um eine klasse handelt die vorgefertigte funktionen hat, mit denen man alles in einen stream packen kann.
http://synapse.ararat.cz/wiki/index.php?page=HtmlForms" onclick="window.open(this.href);return false; ist eine funktion die nur daten sendet. den FileStream und den zusätzlichen TStrings muss ich selber füllen.
und da kommt genau das was ich noch nicht raus habe: wie schreibe ich den inhalt eines bestimmten feldes und den dateityp in den stream?
also wie kann ich "stream.AddFile(Feld5, Wert5, Dateityp); "(was bei indy eine fertige funktion ist) selber machen und den stream mit diesen daten füllen
http://synapse.ararat.cz/wiki/index.php?page=HtmlForms" onclick="window.open(this.href);return false; ist eine funktion die nur daten sendet. den FileStream und den zusätzlichen TStrings muss ich selber füllen.
und da kommt genau das was ich noch nicht raus habe: wie schreibe ich den inhalt eines bestimmten feldes und den dateityp in den stream?
also wie kann ich "stream.AddFile(Feld5, Wert5, Dateityp); "(was bei indy eine fertige funktion ist) selber machen und den stream mit diesen daten füllen
Na und?ac hat geschrieben:der unterschied ist, dass es sich bei der Indy komponente um eine klasse handelt die vorgefertigte funktionen hat, mit denen man alles in einen stream packen kann.
http://synapse.ararat.cz/wiki/index.php?page=HtmlForms" onclick="window.open(this.href);return false; ist eine funktion die nur daten sendet. den FileStream und den zusätzlichen TStrings muss ich selber füllen.
Also Dir fehlt die Angabe für den Dateityp?ac hat geschrieben: und da kommt genau das was ich noch nicht raus habe: wie schreibe ich den inhalt eines bestimmten feldes und den dateityp in den stream?
also wie kann ich "stream.AddFile(Feld5, Wert5, Dateityp); "(was bei indy eine fertige funktion ist) selber machen und den stream mit diesen daten füllen
Aber du siehst doch wie's in der Wiki Demo gemacht ist.
Du kannst "Application/octet-string" ja mit was anderem ersetzen, wenn du magst.
-
- Beiträge: 440
- Registriert: So 10. Dez 2006, 14:59
- OS, Lazarus, FPC: MacOSX Lion 10.7 (L 0.9.31 FPC 2.7.1)
- CPU-Target: 64Bit
- Kontaktdaten:
Ich brauche wieder hilfe 
Bei mir geht HttpGetText nicht, da kommt dieser fehler wenn er Http... erreicht hat:
Fehler 1
Fehler 2
Hoffe jemand kennt die Lösung^^
MfG,
Eugen

Code: Alles auswählen
procedure TForm1.FormCreate(Sender: TObject);
var responseStream: TFileStream;
txt: TStrings;
begin
StringGrid1.RowCount := 2;
XML := ParamStr(1);
Pfad := ExtractFilePath(Application.ExeName);
responseStream := TFileStream.Create(Pfad+'\la.tmp', fmCreate);
HttpGetText(XML, txt);
ShowMessage('Geht noch^^');
responseStream.WriteAnsiString(txt.Text);
responseStream.free;
Fehler 1
Fehler 2
Hoffe jemand kennt die Lösung^^
MfG,
Eugen
Ahem... Das ist aber auch ziemlich falsch.
Also du übergibst dem HTTPGetText als URL den XML Parameter den du von
Commandline einliest?
HttpGetText ist so definiert:
function HttpGetText(const URL: string; const Response: TStrings): Boolean;
Ich weiss ja nicht was in XML drinsteht, aber das ist mindestens der falsche Variablenname, der müsste URL heissen.
Dann musst du "txt" createn bevor du's übergibst (txt:=TStringlist.create).
Ich hab dir doch oben ne Demo geschrieben, extra für dich.
Also du übergibst dem HTTPGetText als URL den XML Parameter den du von
Commandline einliest?
HttpGetText ist so definiert:
function HttpGetText(const URL: string; const Response: TStrings): Boolean;
Ich weiss ja nicht was in XML drinsteht, aber das ist mindestens der falsche Variablenname, der müsste URL heissen.
Dann musst du "txt" createn bevor du's übergibst (txt:=TStringlist.create).
Ich hab dir doch oben ne Demo geschrieben, extra für dich.