![]() |
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. ![]()
Delphi-Quellcode:
Das Formular schaut wie folgt aus:
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;
Code:
Funktioniert auch alles prima. Jetzt habe ich aber die Datei gesplittet in 1 MB-Blöcke und möchte die nacheinander uploaden:
<?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'); ?> "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:
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();
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; |
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. |
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 - 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