Feedback

Datei auf einen Ftp uploaden

Sprache: C#

Mithilfe der Klasse FtpWebRequest eine lokale Datei auf einen Ftp Server abspeichern.
        private void SaveOnFtP()
        {
            //Eine neue Datei erstellen und lokal speichern (Beispiel hier: Textfile)
            StreamWriter w = new StreamWriter("C://Beispiele/MyFile.txt", true);
            w.WriteLine("BlaBlaBla");
            w.Close();

            //Ein Request erstellen an den ftp Server
            FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://ftp.meinftp.ch/");

            //Die Methode angeben um eine Datei hochzuladen
            request.Method = WebRequestMethods.Ftp.UploadFile;

            //Berechtigungsdetails setzen vom ftp Server durch Username und Passwort
            request.Credentials = new NetworkCredential("Username", "Passwort");

            try
            {
                //Versuch eine Verbindung zu erstellen und eine Antwort zu erhalten
                WebResponse response = request.GetResponse();
                MessageBox.Show("Response hat funktioniert");
            }
            catch (Exception exp)
            {
                MessageBox.Show(exp.ToString());
            }


            //Neuer FileStream erstellen für die Datei
            FileStream fs = new FileStream("C://Beispiele/MyFile.txt", FileMode.Open);
            byte[] fileContents = new byte[fs.Length];
            fs.Read(fileContents, 0, Convert.ToInt32(fs.Length));
            fs.Flush();
            fs.Close();

            //Ein neuen Stream für den Request erstellen dem der FileStream mitgegeben wird.
            Stream requestStream = request.GetRequestStream();
            requestStream.Write(fileContents, 0, fileContents.Length);
            requestStream.Close();

            //Verbindung abbschliessen
            request.Abort();              
}

/*
 * Die Datei ist nun auch lokal gespeichert
 *und muss dort wieder gelöscht werden.
 */
        private void SaveOnFtP()
        {
            //Eine neue Datei erstellen und lokal speichern (Beispiel hier: Textfile)
            StreamWriter w = new StreamWriter("C://Beispiele/MyFile.txt", true);
            w.WriteLine("BlaBlaBla");
            w.Close();

            //Ein Request erstellen an den ftp Server
            FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://ftp.meinftp.ch/");

            //Die Methode angeben um eine Datei hochzuladen
            request.Method = WebRequestMethods.Ftp.UploadFile;

            //Berechtigungsdetails setzen vom ftp Server durch Username und Passwort
            request.Credentials = new NetworkCredential("Username", "Passwort");

            try
            {
                //Versuch eine Verbindung zu erstellen und eine Antwort zu erhalten
                WebResponse response = request.GetResponse();
                MessageBox.Show("Response hat funktioniert");
            }
            catch (Exception exp)
            {
                MessageBox.Show(exp.ToString());
            }


            //Neuer FileStream erstellen für die Datei
            FileStream fs = new FileStream("C://Beispiele/MyFile.txt", FileMode.Open);
            byte[] fileContents = new byte[fs.Length];
            fs.Read(fileContents, 0, Convert.ToInt32(fs.Length));
            fs.Flush();
            fs.Close();

            //Ein neuen Stream für den Request erstellen dem der FileStream mitgegeben wird.
            Stream requestStream = request.GetRequestStream();
            requestStream.Write(fileContents, 0, fileContents.Length);
            requestStream.Close();

            //Verbindung abbschliessen
            request.Abort();              
}

/*
 * Die Datei ist nun auch lokal gespeichert
 *und muss dort wieder gelöscht werden.
 */

7 Kommentare

  1. Hier eine Methode, die um einiges kürzer ist:
    [code]{
    string dateipfad = „C:\PfadDatei.*“;
    string FTP = „ftp://domain.*/Datei.*“;
    string FTPuser = „deinBenutzer“;
    string FTPpasswort = „deinPasswort“;

    My.Computer.Network.UploadFile(dateipfad, FTP, FTPuser, FTPpasswort);
    }[/code]

  2. @Jan: du bekommst die Network-Klasse auch unter C# aus dem Namespace Microsoft.VisualBasic.Devices in Microsoft.VisualBasic.dll

  3. Der Code funktioniert so nicht, VisualStudio bringt den Fehler:
    [b]Der Remoteserver hat einen Fehler zurückgegeben: (550) Datei nicht verfügbar (z.B. nicht gefunden oder kein Zugriff).[/b]

    Den Fehler kann man beheben, wenn man den FtpWebRequest etwas anders erstellt.
    Man muss sollte ihn so erstellen:
    [code]
    String strFilename = „File.txt“;
    FtpWebRequest request = (FtpWebRequest)WebRequest.Create(„ftp://ftp.meinftp.ch/“+strFilename);
    [/code]