AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Code-Bibliothek Library: Internet / LAN / ASP.NET Delphi HTTP Post-Request mit Dateiupload
Thema durchsuchen
Ansicht
Themen-Optionen

HTTP Post-Request mit Dateiupload

Ein Thema von DocBorn · begonnen am 9. Dez 2006 · letzter Beitrag vom 19. Dez 2006
Antwort Antwort
DocBorn

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

HTTP Post-Request mit Dateiupload

  Alt 9. Dez 2006, 22: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, 347x aufgerufen)
  Mit Zitat antworten Zitat
DocBorn

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

Re: HTTP Post-Request mit Dateiupload

  Alt 19. Dez 2006, 18:39
Hier noch eine Beispiel-PHP-Datei, die alle (Text-)Variablen, die übergeben wurden in einer Datei call.txt schreibt und alle Dateien, die hochgeladen wurden im aktuellen Verzeichnis mit file_<nummer> ablegt. Zu beachten ist
  • Existieren bereits Dateien, die nach dem System file_<nummer> benannt sind werden diese evtl. überschrieben
  • Die Berechtigung für das aktuelle Verzeichnis muss so sein, dass der Benutzer unter dem PHP auf dem Server läuft Zugriffsrechte hat, 777 sollte immer passen, ist allerdings nicht erste Wahl.
  • Diese Datei ist nur zu Demonstrationszwecken des Codes, eine Datei, die irgendetwas sinnvolles macht muss natürlich selbst geschrieben werden. Wenn ich dabei helfen kann gerne immer PM an mich.
Code:
<?php

// POST-Variablen in Datei call.txt schreiben
$fp = fopen('call.txt', 'w+');
if ($fp) {
  foreach($_POST as $Var => $Val) fputs($fp, $Var.' = '.$Val."\n\r");
  fclose($fp);
}

// Alle hochgeladenen Dateien ablegen
$i = 1;
foreach($_FILES as $File) {
  if (!$File['error'] and move_uploaded_file($File['tmp_name'], 'file_'.$i))
    echo 'Datei-Upload erfolgreich ('.$i.')
'."\n\r";
  else
    echo 'Datei-Upload Fehler ('.$i.')
'."\n\r";
  $i++;
}

?>
  Mit Zitat antworten Zitat
Antwort Antwort

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:50 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