Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi PHP ? Upload ? Delpi ? (https://www.delphipraxis.net/20295-php-upload-delpi.html)

devnull 15. Apr 2004 19:13


PHP ? Upload ? Delpi ?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
ich möchte, dass ein Delphi-Programm eine Datei auf einen Server hochladen kann (nicht FTP).
Dazu habe ich ein PHP-Script auf dem Server, das durch einen Aufruf im HTML-Quelltext einen
Dateinamen übergibt...

Wie kann ich jetzt mit Delphi sowas machen (mit HTML bekomm ichs hin) ?


mfg
devnull

fkerber 15. Apr 2004 19:15

Re: PHP ? Upload ? Delpi ?
 
Hi!

Dann ruf doch deine HTML-Seite auf, die das macht und dann bist du fertig.
Das dürfte der einfachste Weg sein, oder?

Ciao fkerber

devnull 15. Apr 2004 19:16

Re: PHP ? Upload ? Delpi ?
 
Aber ich weis nicht, wie ich da mit Delphi den Dateipfad übergeben soll!

fkerber 15. Apr 2004 19:18

Re: PHP ? Upload ? Delpi ?
 
Hi!

Bau dir doch deine HTML-Seite mit Delphi zusammen, speichere sie und rufe sie auf.

Gibt vielleicht (bestimmt) nen besseren Weg, aber den kenn ich nicht :wink:


Ciao fkerber

devnull 15. Apr 2004 19:23

Re: PHP ? Upload ? Delpi ?
 
Kann man da nix mit der Indy-Unit "IdMultipartFormData" machen ???
Ich versteh nur den Aufruf der Proce AddFile(); nicht.

SirThornberry 15. Apr 2004 20:06

Re: PHP ? Upload ? Delpi ?
 
mit idhttp.Post(URL, MultiPartFormDataStream) ist das kein Problem... Wo genau liegt dein Problem?

Mal noch bissl source..
Delphi-Quellcode:
var DataStream: TIdMultiPartFormDataStream;
    http2: TIdHttp;
begin
   http2 := TIdhttp.Create(Self);
   [...]
   DataStream := TIdMultiPartFormDataStream.Create;
   [...]
   DataStream.AddFile('image', picuploadname.Text, 'image/jpeg');
   http2.Post(url,DataStream);
   http2.Free;
   DataStream.Free;

devnull 15. Apr 2004 20:10

Re: PHP ? Upload ? Delpi ?
 
Ja, das hab ich schon probiert:

Delphi-Quellcode:
var data : TIdMultiPartFormDataStream;
begin
  data := TIdMultiPartFormDataStream.Create;
  try
    data.AddFile('loadfile', 'c:\test.txt', 'file');
    Memo1.Lines.Text := IdHTTP1.Post(server_url+'/upload.php', data);
  finally
    data.Free;
  end;
end;
Da wird dann aber nach einer Weile in das Memo der Inhalt der upload.php geschrieben.
Die Datei selbst, aber nicht auf den Server geladen! Die Berechtigung ist jedoch ge-
geben.

SirThornberry 15. Apr 2004 20:13

Re: PHP ? Upload ? Delpi ?
 
ich weiß nicht ob der Fehler in den Indys bereits behoben wurde. ID-Multipartformdata hatte under D6 noch einige Probleme. Mit Delphi7 Enterprise ging es allerdings ohne Probleme... Irgendwann hatten wir hier mal nen Thread darüber wo jemand dachte ich verarsch ihn weil er es immer wieder probiert hat und es bei ihm nicht geklappt hat, bei mir aber schon. Dann hab ichs auch mal mit delphi6 Personal probiert und es hat nicht geklappt... Am Ende des Thread hab ich dann gepostet was man an den Indies ändern muss damit es funktioniert (ohne Gewähr)

SirThornberry 15. Apr 2004 20:20

Re: PHP ? Upload ? Delpi ?
 
Hab den Thread mal rausgesucht
http://www.delphipraxis.net/internal...ct.php?t=11441
auf der zweiten Seite ist die Lösung...

Kannst ja dann mal posten obs geklappt hat

devnull 15. Apr 2004 20:34

Re: PHP ? Upload ? Delpi ?
 
Danke, ich hab die vorhandenen Units mit deinen überschrieben.
Diese sind etwas kleiner, aber dafür funktioniert nun der upload :thuimb: :thuimb: :thuimb:

mfg
devnull

horst 24. Apr 2004 23:56

Re: PHP ? Upload ? Delpi ?
 
so kannst das feld füllen
Delphi-Quellcode:
procedure TForm1.SetFilename(Value: WideString);
var
  Doc: IHTMLDocument2;
  Elements: IHTMLElementCollection;
  Element: IHTMLElement;
  InputElement: IHTMLInputElement;
  I, j: Integer;
  FormItem: Variant;
  pch: PChar;
  str1: string;
begin
  str1 := Value; //convert input value to string
  pch := PChar(str1); //type cast to pointer

  Doc := WebBrowser1.Document as IHTMLDocument2;
  Elements := Doc.all;
  for I := 0 to Elements.length - 1 do
  begin
    Element := Elements.item(I, EmptyParam) as IHtmlElement;
    if Element.tagName = 'loadfile' then
    begin
      InputElement := Element as IHTMLInputElement;
      if (SameText(InputElement.type_, 'file')) and
        (SameText(InputElement.Name, 'deindateiname')) then
      begin
        FormItem := InputElement;
        FormItem.Focus;
        SendKeys(PCh, False); // NOTE the false flag
      end;
    end;
  end;
end;
du brauchst dazu die SNDKEY32.PAS... ist auf der delphi cd in X:\INFO\EXTRAS\SENDKEYS

mcjoin 21. Jun 2005 10:21

Re: PHP ? Upload ? Delpi ?
 
ich hab bei delphi 7 EE das gleiche problem gehabt. anscheinend muss auch da die pas datei wie in dem anderen thread beschrieben ändern.
ersetzen mit:
sContentDisposition = 'Content-Disposition: form-data; name=';

Catbytes 21. Jun 2005 11:06

Re: PHP ? Upload ? Delpi ?
 
Wenn Du schon die Indy-Komponenten benutzt, warum nimmst Du nicht "Put"?

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  PutDataStream: TStringStream;
  Datei: TFileStream;
  Stream: TStream;
begin
  if (OpenDialog1.Execute) then
    Datei := TFileStream.Create(OpenDialog1.FileName, fmOpenRead);
  Stream := TStream.Create;
  Stream := Datei;
  PutDataStream := TStringStream.Create('');
  try
    IdHTTP1.Put('http://wasauchimmer.de', Stream, PutDataStream);
    Memo1.Text := PutDataStream.DataString;
  finally
    PutDataStream.Free;
    Stream.Free;
  end;
end;
In PHP sieht das ganze dann so aus, um mit PUT-Dateien zu empfangen:

Code:
/* PUT Daten kommen in den stdin Stream */
$putdata = fopen("php://stdin","r");

/* Eine Datei zum Schreiben öffnen */
$now = date("Y-m-d - H_i_s");
$fp = fopen("put/".$now.".txt","w");

/* Jeweils 1kB Daten lesen und
   in die Datei schreiben */
while ($data = fread($putdata,1024))
  fwrite($fp,$data);

/* Die Streams schließen */
fclose($fp);
fclose($putdata);
Pfad (put/) halt anpassen.


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