| Autor |
Beitrag |
Fussel
Hält's aus hier
Beiträge: 6
|
Verfasst: Mo 28.04.03 15:24
Hallo,
ich möchte gerne Dateien an einen Server via http uploaden. Dafür möchte ich gerne die Indy-Komponenten verwenden. Diese habe ich auch schon installiert und auch die Demos runtergeladen. Aber wenn ich den HTTPClient und HTTPServer starte kommen immer Fehlermeldungen:-(
Hat jemand schonmal so etwas programmiert und kann mir den Code zusenden? Wäre echt nett. Ich suche nämlich schon seit Tagen etwas passendes..bin aber leider immer noch nicht fündig geworden. Wie kann ich denn aud die Daten zugreifen, die ich mit über IdHTTP1.Post(...) an den Server geschickt habe? Und muß ich bei der Url auch einen Ordner angeben, oder kann ich nur sowas wie 'http://meinserver' angeben? Ich will nämlich nicht, dass die Dateien gleich auf den Server kopiert werden, sondern dass auf dem Server eine Anwendung läuft, die erst prüft, ob alles o.k. ist und dann erst die Dateien speichert.
Kann mir jemand helfen?
Viele Grüße, Fussel
|
|
BungeeBug
      
Beiträge: 901
|
Verfasst: Mo 28.04.03 17:06
Hi,
soweit ich weis ist ein Upload per HTTP NICHT möglich (sieht das Protokoll nicht vor) .. eine alternative ist dann natürlich einen Zusätzlichen FTP-Server bereit zustellen.
MfG BungeeBug
|
|
Moritz M.
      
Beiträge: 1672
|
Verfasst: Mo 28.04.03 17:37
Upload per http ist definitiv nicht möglich. Dafür ist das http-Protokoll nicht vorgesehen, wegen der Sicherheit. Es heißt auch auch Hypertext Transport Protocoll, es ist also nur für Downloads gedacht.
Deswegen wurde das ftp, das File Transport Protocoll, eingeführt. Du muss also einen ftp-Server und Client benutzen, um den Upload zu machen.
|
|
Fussel 
Hält's aus hier
Beiträge: 6
|
Verfasst: Di 29.04.03 07:58
Hallo!
Wieso ist upload per http nicht möglich? Seti@home benutzt doch auch http um die Daten an den Server zu senden?! Man muß doch mit der IdHttp.Post() ein File an den Server senden können.
Ich habe dazu auch einen Link gefunden: Link Ich weiß nur noch nicht, wie ich auf die gesendeten Daten zugreifen kann. Oder bin ich da jetzt völlig auf dem Holzweg????
Gruß
|
|
Moritz M.
      
Beiträge: 1672
|
Verfasst: Di 29.04.03 13:16
Also, ich bin auch kein Profi darin, aber wenn der Upload per http gehen würde, wäre das DAS Sicherheitsloch überhaupt. Dann wären alle Server ungeschützt, da auf http keine Zugangsdaten sind. Versuch das mal lieber mit ftp, ansonsten, falls es gehen sollte, wäre dein Server komplett ungeschützt.
|
|
Fussel 
Hält's aus hier
Beiträge: 6
|
Verfasst: Di 29.04.03 13:25
Hallo,
ich dachte eben, dass ich mit meinem Upload-Tool das File an einen bestimmten Port vom Server schicke. An diesem Port würde dann ein weiteres Tool "warten" und schauen, ob der User die Rechte zum Uploaden hat (ARequestInfo.AuthUsername, ARespnseInfo.AuthPassword).
Wenn er sie hat, wird das File gespeichert, ansonsten nicht.
Naja, da hab ich wohl falsch gedacht:-(
Trotzdem Danke.
Gruß,Fussel
|
|
Moritz M.
      
Beiträge: 1672
|
Verfasst: Di 29.04.03 13:27
Hallo
Vom Prinzip her hört sich das gut an. Es wird aber warscheinlich nicht gehen. Und:
Warum http nutzen, wenn ftp verfügbar ist?
Wir könnten zum Laufen auch unsere Hände benutzen, machen wir aber nicht, weil es zu kompliziert ist.
|
|
Fussel 
Hält's aus hier
Beiträge: 6
|
Verfasst: Di 29.04.03 13:31
Es hat ja schon seinen Grund, dass ich http nehmen will:
Das Upload-Tool wird sehr häufig auf Rechnern laufen, die hinter einer Firewall sind...und die meisten Firmenfirewalls lassen nunmal kein ftp durch.
Gruß
|
|
Moritz M.
      
Beiträge: 1672
|
Verfasst: Di 29.04.03 13:35
Achso. Aber was glaubst du, warum die http durchlassen? Weil es sowas nicht kann.
|
|
Fussel 
Hält's aus hier
Beiträge: 6
|
Verfasst: Di 29.04.03 13:41
Du bist gemein
Du zerstörst meine ganzen Hoffnungen
Aber mich würd es ja trotzdem mal interessieren, wie das Seti@home macht. In der Doku steht nämlich, dass die http (!!!) benutzen.
|
|
O'rallY
      
Beiträge: 563
|
Verfasst: Di 29.04.03 14:54
Warum sollte dies mit HTTP nicht möglich sein? Und warum wäre das ein Sicherheitsloch? HTTP ist nur ein Übertragungsprotokoll, eine Übertragungsart, d.h. es ist nur für das verschicken der Daten verantwortlich, nicht aber für die Weiterverarbeitung. Das gleiche gilt für jegliche Internetprotokolle, auch für FTP. Was der Server bzw. Client mit den Daten anstellt ist ihm überlassen.
HTTP ist einfach nur auf formatierte Textdatein spezialisiert, sowie FTP eben auf Dateien spezialisiert ist. Das eine schließt aber das andere nicht aus!
Daher bin ich der Meinung das dies sehr wohl geht!
@Fussel Eigentlich dürfte sich die Handhabung der TIdHTTP-Komponente doch nicht derartig von den andere Protokoll-Kompos unterscheiden...? Ich muss aber dazu sagen, ich hab noch nicht mit der Kompo gearbeitet. Werd mich mal umschauen.
_________________ .oO'rallY
Linux is like a tipi: No gates, no windows and a gnu-eating apache inside...
Zuletzt bearbeitet von O'rallY am Di 29.04.03 16:57, insgesamt 1-mal bearbeitet
|
|
Fussel 
Hält's aus hier
Beiträge: 6
|
Verfasst: Di 29.04.03 15:08
@ O'rallY
Oh, dass wär nett, wenn Du Dich da mal umschauen könntest.
Mir ist nämlich was voll komisches passiert:
Ich hab das Upload-Tool auf einem Rechner installiert und das "Empfangstool" auf einem anderen Rechner.
Wenn ich jetzt mit dem Upload-Tool, was an das Empfangstool sende,
antwortet mir das Empfangstool, dass es die Daten bekommen hat.
Response funktioniert also.
ABER:
Wenn ich jetzt am "Empfangstool" über ARequestInfo.Document ect. zugreifen will, bekomme ich nur einen leeren String.
Das ist komisch. Vielleicht weißt Du ja woran das liegt?
|
|
O'rallY
      
Beiträge: 563
|
Verfasst: Di 29.04.03 15:11
Gibscht du mir mal den Source, bidde?
_________________ .oO'rallY
Linux is like a tipi: No gates, no windows and a gnu-eating apache inside...
|
|
matze
      
Beiträge: 4613
Erhaltene Danke: 24
XP home, prof
Delphi 2009 Prof,
|
Verfasst: Di 29.04.03 15:57
also datei transfer ist devinitiv SCHON im HTTP Protokoll vorgesehen !!!
da gibt es nämlich neben GET und POST auch PUT, mit dem man dateien übertragen kann !
Es geht aber auch anders: wenn man in eine HTTP Seite ein formular einbaut, kann man mit einem TAG auch ein feld einbauen, in dem der user eine datei hochladen kann. das geht per HTTP POST. wie genau das geht weiss ich nicht.
Aber POST und PUT werden von INDY unterstützt !
_________________ In the beginning was the word.
And the word was content-type: text/plain.
|
|
O'rallY
      
Beiträge: 563
|
Verfasst: Di 29.04.03 16:22
Mit diesem Code konnte ich Daten vom TIdHTTP zum TIdHTTPServer schaffen (ist noch nicht ganz koscha):
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:
| //Client:
procedure TForm1.Button1Click(Sender: TObject); var fs: TFileStream; begin fs := TFileStream.Create('c:\temp\clientpost.txt', fmOpenRead); IdHttp1.Post('http:\\127.0.0.1', fs); fs.Free; end;
//Server: //TIdHTTPServer1 Binding: 127.0.0.1:80, Active: true
procedure TForm1.IdHTTPServer1CreatePostStream(ASender: TIdPeerThread; var VPostStream: TStream); var fs: TFileStream; begin fs := TFileStream.Create('c:\temp\got.txt', fmCreate); with ASender.Connection do begin ReadStream(fs, RecvBufferSize); Disconnect; end; fs.free; end; |
Allerdings ist RecvBufferSize immer 32768 Bytes groß, werde noch ausprobieren, wie ich das anpasse. Ist natürlich genau der Wert wie die SendBufferSize-Property beim Client. Wenn man diese verändert klappts trotzdem nicht. Muss also herausfinden woher diese Zahl kommt!
Ach und noch was: Ich glaube OnCreatePostStream ist hier misbraucht worden, aber naja, was will man, es klappt doch  .
P.S.: Axo, vom Server zum Client geht übrigens mit der Clientmethode Get und dem Server-Event OnCommand Get. Aber das ist hier ja nicht das Problem.
_________________ .oO'rallY
Linux is like a tipi: No gates, no windows and a gnu-eating apache inside...
|
|
Shadowdragon
      
Beiträge: 143
Win 2000
Delphi 6 Pers., Delphi 7
|
Verfasst: Mi 07.05.03 14:17
Sowas zu machen wäre theoretisch schon möglich, sons würd Indy ja keine IDHTTP.Put zulassen....
das Ganze wird aber eben nicht auf anderen Servern ausser den selbsterstellten funktionieren, da die Default-Sicherheitseinstellungen eines Servers ein Upload per HTTP verhindern.
Auch WENN irgendjemand mit der Lösung aufkommt, wird sie daher wohl kaum praktisch anwendbar sein.
Aber interessant wäre es schon, da HTTP ja um einiges schneller als FTP ist....
_________________ Ein Programm gleicht dem Prinzip von Jenga:
Viele Bestandteile, wird nach oben hin immer besser, nach unten hin immer instabiler und wenn man was falsch macht klappt der ganze Mist zusammen.
|
|
Shadowdragon
      
Beiträge: 143
Win 2000
Delphi 6 Pers., Delphi 7
|
Verfasst: So 11.05.03 08:40
Hab was dazu gefunden:
chem.tufts.edu/cours...143/uplinkdwnld.html
Jetzt müsste man nur noch wissen, welche server HTTP-Uploads von Client-Rechnern unterstützen. 
_________________ Ein Programm gleicht dem Prinzip von Jenga:
Viele Bestandteile, wird nach oben hin immer besser, nach unten hin immer instabiler und wenn man was falsch macht klappt der ganze Mist zusammen.
|
|