Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi http upload aus einer "Form" heraus (https://www.delphipraxis.net/140579-http-upload-aus-einer-form-heraus.html)

noo.bee 21. Sep 2009 13:49


http upload aus einer "Form" heraus
 
also ich wollte mir für duckload.com n kleines proggie basteln, um via drag&drop meine sachen hochzuladen.
die anmeldung funktioniert schonmal bestens (danke an die helfer :thumb: ). jedoch haut der upload nicht hin.

user: 123456123456
pass: 123456123456

Delphi-Quellcode:
procedure TForm1.uploadClick(Sender: TObject);
var
  MultiPartFormDataStream: TMsMultiPartFormDataStream;
  Response: String;
begin
   MultiPartFormDataStream := TMsMultiPartFormDataStream.Create; // Objekte instanzieren
  try
      // Content-Type bestimmen
      idhttp1.Request.ContentType := MultiPartFormDataStream.RequestContentType;

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

      // Datei laden
      MultiPartFormDataStream.AddFile('upload', 'c:\clock.avi', '');

      // 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 := idhttp1.Post(s, MultiPartFormDataStream); // in der variablen 's' steht die url, wohin hochgeladen werden soll,da sich die   url ändert

      except
        // Upload fehlgeschlagen, entsprechend reagieren
      end;
  finally
    MultiPartFormDataStream.Free;
  end;
end;
kann einer helfen und sagen, wo der fehler liegt ?

Luckie 21. Sep 2009 13:55

Re: http upload aus einer "Form" heraus
 
Eine etwas ausführlichere Fehlerbeschreibung als "haut nicht hin" wäre bestimmt hilfreich.

noo.bee 21. Sep 2009 14:28

Re: http upload aus einer "Form" heraus
 
naja es kommt keine fehlermeldung oder sowas.
ich drücke meinen button fürs hochladen, dann geschieht der zugriff aufs inet (sagt meine firewall) und für n paar sek ist das proggie am arbeiten (der upload dauert nur wenige sekunden). aber wenn ich dann auf den account bei duckload.com schaue (user und passwort sind richtig eingetragen zum einloggen :wink: ), ist dort keine datei angekommen.
die url zum hochladen in der variable 's' wird geparsed mit Pos, PosEx und Copy, da sich diese immer ändert.

Andreas L. 21. Sep 2009 15:41

Re: http upload aus einer "Form" heraus
 
Cross-Post im DF: http://www.delphi-forum.de/viewtopic.php?t=94737

noo.bee 21. Sep 2009 15:54

Re: http upload aus einer "Form" heraus
 
danke :thumb:

noo.bee 22. Sep 2009 11:57

Re: http upload aus einer "Form" heraus
 
ich poste mal den ganze code, vllt lässt sich das dann besser der fehler finden :gruebel:

Delphi-Quellcode:
unit duck1709;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
  IdHTTP, MsMultiPartFormData, IdCookieManager, StrUtils, pngimage, ExtCtrls,
  GIFImg;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    login: TButton;
    IdHTTP1: TIdHTTP;
    Edit2: TEdit;
    Memo1: TMemo;
    upload: TButton;
    IdCookieManager1: TIdCookieManager;
    storXX: TButton;
    Label1: TLabel;
    Edit3: TEdit;
    Image1: TImage;
    Label2: TLabel;
    Label3: TLabel;
    Image2: TImage;
    Image3: TImage;
    procedure loginClick(Sender: TObject);
    procedure uploadClick(Sender: TObject);
    procedure storXXClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  StringList, sl: TStringList;
  Edit3: TEdit;
  s: string;
implementation

{$R *.dfm}



procedure TForm1.loginClick(Sender: TObject);
begin
  StringList := TStringList.Create; //TStringList erstellen
  try
    StringList.Values['yl_name'] := '123456123456'; //Edit1.Text;
    StringList.Values['yl_pw'] := '123456123456'; //Edit2.Text;
    StringList.Values['yl_submit'] := 'Login';
    idhttp1.Post('http://duckload.com/index.php?Modul=Login', StringList);
    memo1.Lines.Text := idhttp1.Post('http://duckload.com/member/', StringList);
  finally
     StringList.Free; //Speicherfreigeben
end;
end;

////////////////////////////////////////////////////////////////

procedure TForm1.storXXClick(Sender: TObject);
var
  Position1, Position2: Integer;
begin
  s := idhttp1.Get('http://duckload.com/index.html');

  //sucht nach action=" und gibt die Position im String zurück,
  //wir erhalten die Position von a möchten aber wissen was zwsichen
  // " und " steht. Also zählen wir die Länge des Suchstrings dazu
  Position1 := pos('action="', s) +8;

  //wir suchen nach dem abschließenden ", ab unserer ersten Position,
  //könnten ja mehrere " im String sein...
  Position2 := PosEx(s, '"', Position1) - 1;

  //wir kopieren den Text zwischen unseren Positionen, Copy erwartet
  //aber nicht die Position des letzten Zeichen als dritten Parameter
  //sondern die Anzahl der zu kopieren zeichen, da darfst du jetzt mal selbst überlegen ;-)
  s := Copy(s, Position1, 48);
  edit3.Text := s; // Ausgabe des benutzten Stores

end;

////////////////////////////////////////////////////////////////

procedure TForm1.uploadClick(Sender: TObject);
var
  MultiPartFormDataStream: TMsMultiPartFormDataStream;
  Response: String;
begin
   MultiPartFormDataStream := TMsMultiPartFormDataStream.Create; // Objekte instanzieren
  try
      // Content-Type bestimmen
      idhttp1.Request.ContentType := MultiPartFormDataStream.RequestContentType;

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

      // Datei laden
      MultiPartFormDataStream.AddFile('upload', 'clock.avi', 'multipart/form-data');

      // 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 := idhttp1.Post(s, MultiPartFormDataStream);

      except
        // Upload fehlgeschlagen, entsprechend reagieren
      end;
  finally
    MultiPartFormDataStream.Free;
  end;
end;

end.

noo.bee 22. Sep 2009 23:18

Re: http upload aus einer "Form" heraus
 
also ich hab mir mal die fehlerseite rückgeben lassen:
Code:
<html><head><title>Error</title><link rel='stylesheet'
href='http://youload.to/design/beta2/youload.css?37' type='text/css' media='screen'
charset='utf-8' /><link rel='stylesheet' href='http://youload.to/design/beta2/global.css?37'
type='text/css' media='screen' charset='utf-8' /></head><body><div class='error_message'>No
file Uploaded!
[url='test.php']Back[/url]</div></body></html>
was musste ich da lesen:
--> NO FILE UPLOADED

wo steckt dann denn hier beim upload der fehler ?
Delphi-Quellcode:
procedure TForm1.uploadClick(Sender: TObject);
var
  MultiPartFormDataStream: TMsMultiPartFormDataStream;
  Response: String;
begin
   MultiPartFormDataStream := TMsMultiPartFormDataStream.Create; // Objekte instanzieren
  try
      // Content-Type bestimmen
      idhttp1.Request.ContentType := MultiPartFormDataStream.RequestContentType;

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

      // Datei laden
      MultiPartFormDataStream.AddFile('upload', 'c:\clock.avi', '');

      // 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 := idhttp1.Post(s, MultiPartFormDataStream);
        memo1.Lines.Text := Response;
      except
        // Upload fehlgeschlagen, entsprechend reagieren
      end;
  finally
    MultiPartFormDataStream.Free;
  end;
end;

noo.bee 23. Sep 2009 23:06

Re: http upload aus einer "Form" heraus
 
:oops: :oops: könnte vllt mal jemand drüberlunsen ob er nicht den fehler findet ? :oops: :oops:

noo.bee 24. Sep 2009 21:12

Re: http upload aus einer "Form" heraus
 
ok, wenn keiner ne lösung weiß, dann werd ich das demnächst auf eis legen... hab den upload nach anleitung gemacht, aber irgendwo klemmts und ich find nicht raus wo...
habs auch mal bei DF gepostet - da scheint auch keiner den fehler zu finden :?:

sx2008 24. Sep 2009 23:35

Re: http upload aus einer "Form" heraus
 
Schau mal diesen Block an:
Delphi-Quellcode:
try
  // Anfrage abschicken, hier halt z.B. "deine" PHP-Datei hinsetzen
  Response := idhttp1.Post(s, MultiPartFormDataStream);
  memo1.Lines.Text := Response;
except
  // Upload fehlgeschlagen, entsprechend reagieren
end;
Es ist natürlich ziemlich suboptimal, jegliche Exceptions unter den Teppich zu kehren.
Ändere das mal so ab, dann hast du zumindest die Chance das Problem zu finden:
Delphi-Quellcode:
try
  // Anfrage abschicken, hier halt z.B. "deine" PHP-Datei hinsetzen
  Response := idhttp1.Post(s, MultiPartFormDataStream);
  memo1.Lines.Text := Response;
except
  on E:Exception do
  begin
    // Fehler protokollieren
    memo1.Lines.Text := E.Message;
    memo1.Lines.Add(E.ClassName);
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:25 Uhr.
Seite 1 von 3  1 23      

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