Einzelnen Beitrag anzeigen

DocBorn

Registriert seit: 7. Jul 2006
Ort: Bonn
26 Beiträge
 
#1

HTTP Post-Request mit Dateiupload

  Alt 9. Dez 2006, 23:33
Das senden eines POST-Request, der auch eine Datei enthält kann man die Indy-Komponenten und die Klasse im Anhang verwenden.
  • MsMultiPartFormData.pas in den uses-Teil aufnehmen
  • eine Indy TIdHttp-Komponente mit dem Namen httpMain zur Verfügung stellen
  • den folgenden Code anpassen, also die URL mit der empfangenden Datei (beispielsweise eine PHP-Datei, könnte aber natürlich auch JSP, ASP oder sonst eine Datei, die mit solchen Requests was anfangen kann sein)
  • und noch den Dateinamen, der gesendet werden soll, die Klasse im Anhang kümmert sich um das Einlesen der Datei, es muss nur der Dateiname übergeben werden, das erste Argument ist der Name, mit dem die Variable übergeben wird, in PHP steht die Datei dann in $_FILES['meine_datei'] zur Verfügung, siehe dazu php.net/move_uploaded_file
  • auf Wunsch an der entsprechenden Stelle weitere Formularfelder übergeben (erster Argument ist der Name und zweites der Wert)
  • Fehler-Behandlung programmieren (sollte man )
Delphi-Quellcode:
var
  MultiPartFormDataStream: TMsMultiPartFormDataStream;
  HttpServer, Response: String;
begin

  // Objekte instanzieren
  MultiPartFormDataStream := TMsMultiPartFormDataStream.Create;

  try
      // Content-Type bestimmen
      httpMain.Request.ContentType := MultiPartFormDataStream.RequestContentType;

      // Formular-Felder setzen, die keine Dateien sein sollen
      MultiPartFormDataStream.AddFormField('EinAnderesFeld', 'dadum');
      // ...

      // Datei laden
      MultiPartFormDataStream.AddFile('meine_datei', 'C:\autoexec.bat', '');

      // diese Methode muss _vor_ dem Senden augerufen werden
      MultiPartFormDataStream.PrepareStreamForDispatch;
      MultiPartFormDataStream.Position := 0;

      try

        // Anfrage abschicken, hier halt z.B. "deine" PHP-Datei hinsetzen
        Response := httpMain.Post('http://www.microsoft.com/test.php', MultiPartFormDataStream);

      except
        // Upload fehlgeschlagen, entsprechend reagieren
      end;
    end;
  finally
    MultiPartFormDataStream.Free;
  end;
end;
Hoffe es hilft einigen weiter und viel Erfolg damit!
Angehängte Dateien
Dateityp: pas msmultipartformdata_181.pas (3,6 KB, 348x aufgerufen)
  Mit Zitat antworten Zitat