Einzelnen Beitrag anzeigen

Chrissi91

Registriert seit: 28. Jul 2005
849 Beiträge
 
#1

1Datei mit MultiPartFormDataStream funktioniert,mehrere nich

  Alt 8. Mär 2008, 18:13
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();
  Mit Zitat antworten Zitat