Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Datei Upload via Http.Post (https://www.delphipraxis.net/80565-datei-upload-via-http-post.html)

Blo 11. Nov 2006 00:37


Datei Upload via Http.Post
 
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:
Code:
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:
Code:
<?php
// In PHP earlier then 4.1.0, $HTTP_POST_FILES should be used instead of
// $_FILES. In PHP earlier then 4.0.3, use copy() and is_uploaded_file()
// instead of move_uploaded_file

$uploaddir = 'tausch/';
$uploadfile = $uploaddir. $_FILES['archive']['tmp_name'];

print "<pre>";
if (move_uploaded_file($_FILES['archive']['tmp_name'], $uploadfile)) {
    print "File is valid, and was successfully uploaded. ";
    print "Here's some more debugging info:\n";
    print_r($_FILES);
} else {
    print "Possible file upload attack!  Here's some debugging info:\n";
    print_r($uploadfile);
}
?>
Wenn ich das Delphiprog. starte gibt das Php-Script zurück:
Code:
<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?

marabu 11. Nov 2006 12:25

Re: Datei Upload via Http.Post
 
Hi,

das erste Argument der Funktion move_uploaded_file() sollte besser $_FILES['archive']['tmp_name'] sein.

Grüße vom marabu

Blo 11. Nov 2006 12:44

Re: Datei Upload via Http.Post
 
Danke für den Tip! Hab ich geändert - keine Veränderung.

marabu 11. Nov 2006 13:06

Re: Datei Upload via Http.Post
 
Schau dir noch deine Variable uploadfile an - dort ist der gleiche Fehler: Muss ['name'] sein statt ['tmp_name'].

Blo 11. Nov 2006 13:44

Re: Datei Upload via Http.Post
 
Habe ich geändert - keine Veränderung!

marabu 11. Nov 2006 13:47

Re: Datei Upload via Http.Post
 
Keine Veränderung?

Wird immer noch ein leerer Namensteil in der Meldung ausgegeben?

Blo 11. Nov 2006 14:05

Re: Datei Upload via Http.Post
 
Ja, es wird immer noch
Zitat:

<pre>Possible file upload attack! Here's some debugging info:
tausch/
ausgegeben.

marabu 11. Nov 2006 16:50

Re: Datei Upload via Http.Post
 
Ich habe dein Problem mit meinen Änderungen auf meinem Rechner nachgestellt - und es funktioniert. Allerdings gebe ich einen absoluten Verzeichnisnamen an und nicht "tausch/". Vielleicht ist ja das dein Fehler.

Grüße

Blo 11. Nov 2006 18:23

Re: Datei Upload via Http.Post
 
Habe einen absoluten Pfad gesetzt:
Delphi-Quellcode:
<?php
$uploaddir = 'c:\xampplite\htdocs\tausch\';
$uploadfile = $uploaddir. $_FILES['archive']['tmp_name'];
print "<pre>";
if (move_uploaded_file($_FILES['archive']['tmp_name'], $uploadfile)) {
    print "File is valid, and was successfully uploaded. ";
    print "Here's some more debugging info:\n";
    print_r($_FILES);
} else {
    print "Possible file upload attack!  Here's some debugging info:\n";
    print_r($uploadfile);
}
?>
Jetzt kommt ein Parser-Error:
Delphi-Quellcode:



[b]Parse error[/b]: parse error, unexpected T_STRING in [b]C:\xampplite\htdocs\upload.php[/b] on line [b]3[/b]
:wall:
Würdest Du bitte dein PHP-Script und die Delphi-Routine einmal posten?

Danke für die Mühe!

marabu 11. Nov 2006 19:47

Re: Datei Upload via Http.Post
 
Kipp mal die Schrägstriche in uploaddir in die entgegengesetzte Richtung und achte endlich auf die richtigen Namen - dann sehen wir weiter.

Code:
$uploaddir = 'c:/xampplite/htdocs/tausch/';
$uploadfile = $uploaddir. $_FILES['archive']['name'];
print "<pre>";
if (move_uploaded_file($_FILES['archive']['tmp_name'], $uploadfile)) { 
...
Grüße


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:58 Uhr.
Seite 1 von 4  1 23     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz