Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Per indy eine Datei über https versenden. (https://www.delphipraxis.net/192342-per-indy-eine-datei-ueber-https-versenden.html)

Kostas 10. Apr 2017 21:00

Per indy eine Datei über https versenden.
 
Hallo Zusammen,

ich habe die Anforderung eine Zip-Datei per HTTPS zu versenden.
Aus der Doku des Servers API ist folgendes zu entnehmen:
-HTTP Basic Authentification für Username und Passwort
-Die Upload-Datei muss als HTTP-Payload und in Binärformat gesendet werden, Multipart und Encoding werden nicht unterstützt.

Alle Beispiele die ich zu Indy finde binden die zu sendende Datei als Multipart wie z.B.:
Delphi-Quellcode:
MultiPartFormDataStream.AddFile('meine_datei', 'C:\autoexec.bat', '');
Hat jemand eine Idee nach was ich suchen muss wenn die Datei als "HTTP-Payload" übertragen werden soll?

Gruß Kostas

Sherlock 11. Apr 2017 07:42

AW: Per indy eine Datei über https versenden.
 
Zitat:

Aus der Doku des Servers API ist folgendes zu entnehmen:
-HTTP Basic Authentification für Username und Passwort
-Die Upload-Datei muss als HTTP-Payload und in Binärformat gesendet werden, Multipart und Encoding werden nicht unterstützt.
Dann ist das nach meinem Verständnis kein https.

Sherlock

Kostas 11. Apr 2017 08:24

AW: Per indy eine Datei über https versenden.
 
Hallo Sherlock,

Sorry, ich habe die URL nicht angegeben. Wegen der URL haben ich angenommen, es muss https sein:

https://services.Irgendwas.de/upload-api/upload/{file-name}

Gruß Kostas

Kostas 11. Apr 2017 09:16

AW: Per indy eine Datei über https versenden.
 
Hallo Zusammen,

es geht viel einfacher als ich dachte. Ich habe es einfach mal probiert den Dateinamen zu übergeben. Genau das ist die Lösung.
Die Datei wurde einwandfrei übertragen und bestätigt.



Delphi-Quellcode:
function TForm3.SendFileViaHTTPS(aFile:String):String;
var aResponceStream: TMemoryStream;
    aFileName:string;
begin
  aFileName := ExtractFileName(aFile);

  IdHTTP1.Request.BasicAuthentication := True;
  IdHTTP1.Request.Username := 'Username';
  IdHTTP1.Request.Password := 'Password';

  aResponceStream := TMemoryStream.Create();
  aResponceStream.Clear;
  aResponceStream.Seek(0,soFromBeginning);
  try
    try
      IdHTTP1.Post(Format('https://services.irgendwas.de/upload-api/upload/%s',[aFileName]), aFile, aResponceStream);
      aResponceStream.Seek(0,soFromBeginning);
      Memo1.Lines.LoadFromStream(aResponceStream);
      Memo1.Lines.Add(IdHTTP1.ResponseCode.ToString);
    except
      on E: EIdHTTPProtocolException do
      begin
        aResponceStream.Seek(0,soFromBeginning);
        Memo1.Lines.LoadFromStream(aResponceStream);
        Memo1.Lines.Add(IdHTTP1.ResponseCode.ToString);
      end;
    end;

  finally
    aResponceStream.Free;
  end;

end;

Schöne Grüße
Kostas

HolgerX 11. Apr 2017 09:22

AW: Per indy eine Datei über https versenden.
 
Hmm..

mit:

Delphi-Quellcode:
IdHTTP1.Post(AURL, ASourceFile)


Kann mit IdHTTP doch direkt ein File versendet werden, ohne die Verwendung von Multipart.

Oder habe ich mich da verlesen ;)

EDIT:
Mist zu langsam ;)

Kostas 11. Apr 2017 11:07

AW: Per indy eine Datei über https versenden.
 
Ja, genau das habe ich gemacht.

Der zweite Parameter aFile ist der Absolute Pfad der Zip-Datei 50MB die ich übertrage.
Das funktioniert einwandfrei. Die Datei kann am Server entpackt werden. Sie ist also nicht defekt.

Gruß Kostas


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:27 Uhr.

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