Entwickler-Ecke
Internet / Netzwerk - Datei-Upload via http
blo - Sa 11.11.06 03:17
Titel: Datei-Upload via http
Hallo!
Ich möchte folgendes Problem lösen: Eine lokale Datei auf einen Webserver hochladen.
Testumgebung: D5 Prof, Indy 9.0.14, xampplight mit php 5.14.
Per FTP klappt das alles. Aber manchmal muss ich auf das Http-Protokoll ausweichen.
Habe versucht mich im Forum schlau zu machen, und verwende mittlerweile folgenden Delphi-Code:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm1.Button1Click(Sender: TObject); var Data: TIDMultiPartFormDataStream; begin Data := TIdMultiPartFormDataStream.Create; try Data.AddFile('archive', 'c:\temp\abc.zip', 'application/zip'); IdHTTP1.Request.ContentType := 'application/x-www-form-urlencoded'; Data.Position := 0; Memo1.Lines.Text := IdHTTP1.Post('http://localhost/upload.php', Data); finally Data.Free; end; end; |
Das zugeörige PHP-Script lautet:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| <?php
$uploaddir = 'tausch/'; $uploadfile = $uploaddir. $_FILES['archive']['name'];
print "<pre>"; if (move_uploaded_file($_FILES['archive']['name'], $uploadfile)) else ?> |
Wenn ich das Delphiprog. starte gibt das Php-Script zurück:
Delphi-Quelltext
1: 2:
| <pre>Possible file upload attack! Here's some debugging info: tausch/ |
Mit anderen Worten, die Datei wurde nicht auf den Server gespeichert.
Kann mir jemand helfen, damit die Datei auf den Server gespeichert wird?
blaueled - Sa 11.11.06 11:17
Hallo,
hast du den savemode eingeschaltet ?
setz die berechtigungen mal auf 777
Arne
blo - Sa 11.11.06 12:05
Hallo Arne,
was meinst Du mit "savemode"?
Soweit ich das Problem mit meinem Programm verstehe (siehe Rückmeldung des Php-Scripts), erhält das Script erst gar nicht den File-Namen der Datei die gespeichert werden soll.
Ich finde nirgendwo eine Doku. die das erklärt (weder in "Indy in depth" oder sonstwo). Für das Ftp-Protokoll ist alles gut erklärt. Aber wer kennt ein gutes Beispiel für das Zusammenspiel Delphi <-> Php bzgl. Dateidown- bzw Upload? Könnte ich gut gebrauchen.
jaenicke - Sa 11.11.06 12:48
Du nimmst ['name'], das ist aber doch der Dateiname auf dem Client-PC!! Und der existiert auf dem Server logischerweise nicht so ohne Pfadangabe...
Du musst ['tmp_name'] nehmen! DAS ist der Name und Pfad der temporären Datei (ich meine jetzt in Zeile 10 natürlich)!
blo - Sa 11.11.06 13:27
Sorry, du hast natürlich recht! Habe ich entsprechend wieder geändert, aber leider kommt immer die Nachricht:
<pre>Possible file upload attack! Here's some debugging info:
tausch/
mkinzler - Sa 11.11.06 13:32
Schau dir mal die php.ini an. Welcher Pfad ist für die Uploads eingetragen? hat der Benutzer darauf Rechte?
blo - Sa 11.11.06 13:47
Es handelt sich um einen lokalen Web-Server (xampplite), da sollte es doch keine Rechtprobleme geben, oder? Eingetragen ist in Php.Ini: upload_tmp_dir = "\xampplite\tmp"
Liegt nicht vielmehr das Problem in der Parameterübergabe? Selbst wenn der Befehl move_uploaded_file fehlschlägt, so sollte doch im else-Bereich der Name der Datei zurückgegeben werden?
mkinzler - Sa 11.11.06 13:50
Versuche mal upload_tmp_dir = "<LW>:\xampplite\tmp"
blo - Sa 11.11.06 14:02
Hab ich gemacht - leider keine Veränderung
blo - Mo 13.11.06 23:00
Habe zwischenzeitlich den Fehler gefunden: Nachdem ich Indy auf 9.0.18 umgestellt habe und das neueste Xampp installiert habe, klappte alles.
Danke für die Unterstützung.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!