Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi 1Datei mit MultiPartFormDataStream funktioniert,mehrere nich (https://www.delphipraxis.net/109837-1datei-mit-multipartformdatastream-funktioniert-mehrere-nich.html)

Chrissi91 8. Mär 2008 18:13


1Datei mit MultiPartFormDataStream funktioniert,mehrere nich
 
Ich habe ja schon des Öfternen mit MultiPartFormDataStream gearbeitet, hat auch prima geklappt. Ich verwende folgenden Code, um eine Datei über ein Formular hochzuladen:

MultiPartFormDataStream: TMsMultiPartFormDataStream; ist lokal deklariert.

Site_URL ist eine Konstante mit der URL, z.B. http://www.google.de/MeinVerzeichnis/

Delphi-Quellcode:
Try
  MultiPartFormDataStream := TMsMultiPartFormDataStream.Create;
  HTTP.Request.ContentType := MultiPartFormDataStream.RequestContentType;
  MultiPartFormDataStream.AddFile('f', ExtractFilePath(ParamStr(0)) + 'dir.txt', '');
  MultiPartFormDataStream.PrepareStreamForDispatch;
  MultiPartFormDataStream.Position := 0;
  Buffer := HTTP.Post(Site_URL + 'upload.php?name=dir', MultiPartFormDataStream);
Finally
  MultiPartFormDataStream.Free;
end;
Das Formular schaut wie folgt aus:

Code:
<?php

    echo '<form action="'.$_SERVER['PHP_SELF'].'" method="post" enctype="multipart/form-data"><input type="file" name="f"><input name="l" type="submit"></form>';
    move_uploaded_file($_FILES['f']['tmp_name'],'/srv/www/vhosts/google.de/httpdocs/MeinVerzeichnis/'.$_GET['name'].'.txt');

?>
Funktioniert auch alles prima. Jetzt habe ich aber die Datei gesplittet in 1 MB-Blöcke und möchte die nacheinander uploaden:

"Dateien" ist lokal deklariert als Integer.
SplitFile ist einfach nur eine eigene Funktion. Sie macht aus dir.txt dir_1.txt, dir_2.txt, etc.
MaxSize ist eine globale Konstante mit 1 MB als Wert, aber in Byte angegeben.
Response ist vom Typ String.

Delphi-Quellcode:
SplitFile(ExtractFilePath(ParamStr(0)) + 'dir.txt', FileGetSize(ExtractFilePath(ParamStr(0)) + 'dir.txt'));
Dateien := Ceil((FileGetSize(ExtractFilePath(ParamStr(0)) + 'dir.txt')) / MaxSize);
DeleteFile(ExtractFilePath(ParamStr(0)) + 'dir.txt');
For I := 1 to Dateien do
  begin
    Try
      MultiPartFormDataStream := TMsMultiPartFormDataStream.Create;
      HTTP.Request.ContentType := MultiPartFormDataStream.RequestContentType;
      MultiPartFormDataStream.AddFile('f', ExtractFilePath(ParamStr(0)) + 'dir_' + IntToStr(I) + '.txt', '');
      MultiPartFormDataStream.PrepareStreamForDispatch;
      MultiPartFormDataStream.Position := 0;
      Response := HTTP.Post(Site_URL + 'upload.php?name=dir' + IntToStr(I), MultiPartFormDataStream);
    Finally
      MultiPartFormDataStream.Free;
      DeleteFile(ExtractFilePath(ParamStr(0)) + 'dir_' + IntToStr(I) + '.txt');
    end;
  end;
Auf dem Server liegt keine einizge Datei danach. Wieso nicht? Habe doch nur eine For-Schleife drumrumgemacht. Verzeichnis hat natürlich CHMOD 777 und wenn ich wie ganz oben nur eine Datei mache, klappt es auch. Die maximale Dateigröße liegt bei 2 MB laut phpinfo();

geofranz01 8. Mär 2008 18:18

Re: 1Datei mit MultiPartFormDataStream funktioniert,mehrere
 
Kenn mich damit jetzt nicht so aus, aber muss in Zeile 12 deines letzten Codes nicht noch ein Unterstrich:

Delphi-Quellcode:
Response := HTTP.Post(Site_URL + 'upload.php?name=dir[color=#ff0000]_[/color]' + IntToStr(I), MultiPartFormDataStream);

P.S. Mein Delphi-Code funktioniert immer noch nicht, :? ich glaube ich wende mich mal an einen Admin.

Chrissi91 8. Mär 2008 18:35

Re: 1Datei mit MultiPartFormDataStream funktioniert,mehrere
 
Welchen Namen die Datei auf dem Server hat ist ja egal. Hatte anfangs mit Unterstrich, aber ich dachte es läge am Sonderzeichen in der URL, dass es nicht klappt und hab ihn rausgenommen.

In dem PHP-Code passiert ja nichts anderes als das Verschieben der temporären Datei nach dir1.txt, etc. Ob da nun ein Unterstrich ist oder nicht, is doch total egal.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:10 Uhr.

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