Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi idHTTP: MemoryStream POSTen (https://www.delphipraxis.net/88903-idhttp-memorystream-posten.html)

SnuffMaster23 22. Mär 2007 18:07


idHTTP: MemoryStream POSTen
 
Ich hab jetzt schon ne Weile hier gesucht und nix brauchbares gefunden, es kann doch nicht so schwer sein :wall:

Ich will ein paar SQL-Befehle an ein Skript schicken (ca 900 kB auf einmal) und hab die in nem MemoryStream.
Ich muss da ja noch irgendwie den Namen des Feldes (textarea) angeben damit das Skript was mit den Daten anfangen kann.
Einfach 'sql_query=' davor funzt nicht...

SnuffMaster23 24. Mär 2007 12:19

Re: idHTTP: MemoryStream POSTen
 
Keiner ne Ahnung?

Hier mal mein Code, aber der wird auch nicht mehr sagen:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Stream1,
  Stream2: TMemoryStream;
  Start,
  Laenge,
  i:      Integer;
  Fil:    string;
begin
  if OpenDialog1.Execute then
  begin
    Stream1 := TMemoryStream.Create;
    Stream2 := TMemoryStream.Create;
    Stream1.LoadFromFile(OpenDialog1.FileName);
    SetLength(Fil, Stream1.Size);
    Stream1.Read(PChar(Fil)^, Stream1.Size);
    Start := 1;
    i    := 0;

//    while Start < Stream1.Size do       // zum debuggen auskommentiert, geht schneller so ;)
    begin
      Inc(i);
      Form1.Caption := IntToStr(i) + '/' + IntToStr(Round(Stream1.Size / 921600));
      if Start + 921600 > Stream1.Size then
        Laenge := Stream1.Size - Start
      else
      begin
        Laenge := 921603 + Pos(';', PChar(Fil) + Start + 921600);
        if Start + Laenge > Stream1.Size then Laenge := Stream1.Size - Start;
      end;
      Stream2.Clear;
      Stream2.Write('lang=de-utf-8'#13#10'server=1'#13#10'collation_connection=utf8_general_ci'#13#10'goto=db_details.php'#13#10'show_query=0'#13#10'sql_query=', 104);
      Stream2.Write(Fil[Start], Laenge);
      if CheckBox1.Checked then
      begin
        IdHTTP1.Request.Username := Edit2.Text;
        IdHTTP1.Request.Password := Edit3.Text;
        Stream1.Clear;
        IdHTTP1.Post(Edit1.Text + 'read_dump.php', Stream2, Stream1); //
        Stream1.SaveToFile('test.htm');                               // Stream1 wird zum debuggen für die Ausgabe missbraucht
      end
      else
        Stream2.SaveToFile(Copy(OpenDialog1.FileName, 0, length(OpenDialog1.FileName) - length(ExtractFileExt(OpenDialog1.FileName))) + ' ' + IntToStr(i) + '.sql');
      Start := Start + Laenge;
    end;
    Form1.Caption := 'fertig';
  end;
end;

Zacherl 24. Mär 2007 15:04

Re: idHTTP: MemoryStream POSTen
 
Guck dir mal den IdStreamVCL an oder besser gesagt such mal danach im Forum. Da stößt du sicherlich auch ein Beispiel mit dem man Dateien über genannten Stream verschickt.

Dabei wird der Inhalt des FileStreams in den IdSTreamVCL eingelesen. Statt eines FileStreams kannst du natürlich auch einfach deinen MemoryStream einlesen lassen.

Florian

SnuffMaster23 24. Mär 2007 15:24

Re: idHTTP: MemoryStream POSTen
 
Hm, so viel gibts da im Forum auch nicht...

Delphi-Quellcode:
IdHTTP1.Post(Edit1.Text + 'read_dump.php', TIdStreamVCL.Create(Stream2, true), Stream1);
Post mag den TIdStreamVCL nicht da inkompatibel zu TStream :(

Für was braucht man denn überhaupt ne andere Art von Stream?

SnuffMaster23 25. Mär 2007 13:11

Re: idHTTP: MemoryStream POSTen
 
*push*


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:34 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