FTP Upload, Datei erscheint nicht
-
Hallo allerseits,
Ich hoffe ich bin hier richtig. Im probiere mich gerade an einem simplen FTP Upload, der jedoch nicht so funktioniert wie es sein soll.
Er erstellt auf dem Server eine temporäre Datei, die aber nach Abbruch des Programms wieder gelöscht wird. Ich hab aber keine Ahnung warum er die Datei nicht hochläd
Danke schonmal für jegliche Hilfe. Hier mal der Code
#include <windows.h> #include <wininet.h> #include <process.h> #include <iostream> #include <fstream> #include <stdio.h> #include <conio.h> #include <wininet.h> #pragma comment(lib, "Wininet.lib") #pragma comment(lib, "ws2_32") using namespace std; void upload(void); void upload() { HINTERNET hOpen, hConnection; hOpen = InternetOpen("FTP Upload", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0); hConnection = InternetConnect(hOpen, "* ftp server*", INTERNET_DEFAULT_FTP_PORT, "* user*", "* password*", INTERNET_SERVICE_FTP, 0, 0); FtpPutFile(hConnection, "C:\\Test\\testfile.txt", "neu.txt", FTP_TRANSFER_TYPE_BINARY, 0); if(FtpPutFile(hConnection, "C:\\Test\\testfile.txt", "neu.txt", FTP_TRANSFER_TYPE_BINARY, 0)) { MessageBox(NULL, "Successfully uploaded log to ftp server!", "Ftp Upload", NULL); } else { MessageBox(NULL, "Successfully uploaded log to ftp server!", "Ftp Upload", NULL); } InternetCloseHandle(hConnection); InternetCloseHandle(hOpen); } int main(void) { std::cout << "************************************************************************" << std::endl; std::cout << " Starting FTP Upload" << std::endl; std::cout << "************************************************************************" << std::endl; std::cout << "\n" << std::endl; upload(); system("pause"); }
-
Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x und C++11) in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Hast du mal versucht, dich dem Problem anzunähern?
Überprüfe die Rückgabewerte von InternetOpen, InternetConnect und FtpPutFile. Dein jetziger Code sieht wie C&P aus, daher empfehle ich ebenfalls dies durchzulesen.
Am Ende könnte es auch an den Verbindungsdaten oder Servereinstellungen liegen, die wir nicht einsehen können.
-
Ich bin dabei mich anzunähern
Danke für den Link. Werde ich mir mal zu Gemüte führen. Die Serverdaten sollten eigentlich stimmen, da er ja eine temporäre Datei auf dem Server anliegt, die ich mit meinem FTP Programm auch sehen kann.
Aber ich überprüfe mal was die einzelnen Methoden zurückgeben.
Danke dir schonmal für die Hilfe
-
Ich hoffe mal, du rufst in deinem Code nicht wirklich 2 mal FtpPutFile mit der selben Datei hintereinander auf, einmal reicht.
Ich kann hier noch folgendes beisteuern: Bei aktiven FTP hinter Firewalls kommt die Kommando-Verbindung oft durch, aber der Upload-Stream kann dann nicht hergestellt werden. Das könnte das Verhalten mit der temporären Datei erklären, die dann nie befüllt wird.
Versuche eine passive Verbindung über per InternetConnect mit INTERNET_FLAG_PASSIVE. Generell gilt, dass passives FTP im Internet eher funktioniert als aktives, aber auch passives FTP kann bei falscher Konfiguration fehlschlagen. Bei mir kam es dann bei bestimmten Aktionen zu Timeouts.
WinInet ist hier recht dumm und erwartet von dir die richtigen Netzwerkangaben, andere FTP Programme erkennen Netzwerkkonfigurationen automatisch und reagieren entsprechend.
-
Benutz libcurl.
Macht den Job imho besser.
-
Danke euch beiden. Es liegt anscheinend wirklich am FTP Server an sich. Hab es mal mit einem anderen probiert und siehe da es klappt einwandfrei. Ich werde eure beiden Tipps aber auch testen, vielleicht klappt es ja dann damit
Danke nochmal für die Hilfe
gruß