Indy HTTP Post (Mehrere Dateien mit einem Post-Befehl)
-
Moin zusammen,
ich arbeite derzeit an einem kleinem Projekt, in dessen Rahmen Dateien auf per http post auf einen Server übertragen werden. Einzelne Dateien kann ich auch ohne Probleme übertragen (inkl. md5 Kontrolle).
Mir geht es nun darum, dass ich aber im Prinzip mit einem Post mehrere Dateien übertragen möchte, weil sie quasi im gleichen Kontext/Session in eine Datenbank eingetragen werden müssen.
Ist das grundsätzlich so leicht zu lösen? Oder muss ich mir da irgendwie was drumherumschustern? Oder alle Dateien in einen Stream nacheinander packen und auf php Seite wieder auseinanderpflücken?
Ich wäre dankbar über grundsätzliche Anreize
Beste Grüße
-
Mir erschließt sich dein Problem nicht wirklich.
Du willst also Dateien über HTTP auf den Server übertragen? Da stellt sich schon mal die Frage, warum du dafür nicht FTP (File Transfer Protocol) verwendest?
Okay, du willst also trotzdem HTTP verwenden und die Daten per POST senden. Dafür musst du dich natürlich mit dem Server verbinden und ihm die Länge der Daten mittelen und diese senden. Scheint für dich kein Problem zu sein.
Nun willst du also parallel Daten versenden? Hier bietet es sich z.B. an Threads zu verwenden. Damit erstellst du einen eigenen Prozess für jede Dateiübertragung und kannst mehrere Daten gleichzeitig übertragen.
Voraussetzung hierfür ist natürlich, dass der HTTP-Server auch in der Lage ist mehrere Verbindungen gleichzeitig zu behandeln. Bei einem selbstgeschriebenen Server ist das nicht unbedingt gegeben.
Eine andere Variante wäre die Daten in einem POST zu senden. Ich würde es so lösen, dass ich in der ersten Zeile einen Header bauen würde, der z.B. so aussehen könnte:
3
123123
543584395
1312312
Eigentliche DatenDamit wird angegeben, dass 3 Dateien folgen und die Größen dieser folgen danach. Du musst dann selber alles zusammen- und auseinanderpflücken, wie du es bereits vermutet hast. Alles in allem auch nicht so schön und evtl. sogar sehr fehleranfällig.
Lange Rede kurzer Sinn: Ich rate dir zu FTP, dafür ist es gemacht.
-
Moin und danke für die Resonanz.
Zunächst muss ich klarstellen, dass es mir nicht lediglich um den Datei-Transfer auf einen Server geht.
Es geht darum, dass es N Clienten(C++/Indy10) und einen Apache2+Mysql gibt. Php Skripte verwalten die Daten auf dem
Server. D.h. nun, dass der Client Dateien hochlädt aber sich nicht darum kümmern muss, dass sie richtig aufgearbeitet werden
und gültige Einträge in der Datenbank erzeugt werden.FTP nehme ich 1. nicht, weil die User/PW im Klartext übertragen werden (SSL mal ausgenommen) und 2. weil ich durch
FTP komplett die PHP Funktionalität außen vorlasse.Leider besteht nun ein "Daten Upload" vom Client zur PHP Seite aus mehreren Dateien. Da ich immer davon ausgehen
muss dass ein Verbindungsabbruch entstehen könnte, kann ich schlecht die Dateien nacheinander hochladen
und dann irgendein Skript ausführen.Bin schon am überlegen ob ich da irgendwas mit Sessions/Cookies kA machen sollte. Hatte evtl gehofft, dass Indy da
irgendwas anzubieten hat um mehrere Dateien(Streams) im Rahmen eines Posts zu übertragen.
Die Geschichte mit einem Header usw und danach den PostStream auseinander pflücken... habe ich mir halt auch schon
überlegt. Nur wirklich schön ist das nicht.
-
Und so einfach kanns gehen:
TIdMultiPartFormDataStream unterstützt mit "AddFile" mehr als eine Datei.
Ich dachte es sei nur eine möglich.Problem gelöst!