Laden...

Per FTP eine Datei hochladen C#

Erstellt von max1761995 vor 11 Jahren Letzter Beitrag vor 11 Jahren 3.281 Views
M
max1761995 Themenstarter:in
23 Beiträge seit 2013
vor 11 Jahren
Per FTP eine Datei hochladen C#

Hei zusammen

Ich versuche eine Datei auf meinen FTP server hochzuladen. Jedoch bekomme ich die Fehlermeldung :

Fehlermeldung:
System.Net.WebExeption: Die angeforderte URI ist für diesen FTP befehl ungültig.
bei System.Net.FtpWebRequest.GetReponse()
bei ftpupload.Form1.button7_Click(Object sender, EventArgs e)

Mein Code lautet wie folgt:


 private void button7_Click(object sender, EventArgs e)
        {
            string file1 = textBox4.Text;
            
            //Ein Request erstellen an den ftp Server
            FtpWebRequest request = (FtpWebRequest)WebRequest.Create(new Uri("ftp://***" + file1));

            //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("***", "***");

            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:\Users\Public\Pictures\Sample Pictures\Pinguine.jpg", 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();  
        } 

Was ist genau der Fehler ?
Ich habe doch eine Uri erstellt....

Gruss

Max

16.806 Beiträge seit 2008
vor 11 Jahren

Nein. Du versuchst von einer Uri eine Uri zu erstellen.
Lass das new Uri() weg und es geht. ftp:// ist schon das aussagekräftige hierbei.

Und schau Dir mal an, was IDisposable ist und wie man Stream und Co mit using() verwendet. Würde Deinem Code auch gut tun 👍

M
max1761995 Themenstarter:in
23 Beiträge seit 2013
vor 11 Jahren
private void button7_Click(object sender, EventArgs e)
        {
            string file1 = textBox4.Text;
            
            //Ein Request erstellen an den ftp Server
            FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://XXXX"+file1);

            //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("***", "****");

            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:\Users\Public\Pictures\Sample Pictures\Pinguine.jpg", 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();  
        } 

Mein neuer code....

Jedoch die genau gleiche Fehlermeldung 😕

Mach ich immer noch etwas falsch ?

C
2.121 Beiträge seit 2010
vor 11 Jahren

Für mich sieht das allgemein etwas schräg aus. Zuerst holst du dir ein Response und wenn das alles schon passiert ist, willst du die Datei hochladen?
Ich würde mir eine FTP Komponente suchen und die verwenden.

W
872 Beiträge seit 2005
vor 11 Jahren

Ich mache den Upload mit webClient so...


var webClient = new WebClient{
                                   Proxy=null,
                                   Credentials=new NetworkCredentials(userName, password),
                                   BaseAddress=ftpServerBase);
var remoteUri = ftpServerBase + path + fileName;
webClient.UploadFile(remoteUri, fileName);

ftpServerBase sieht so aus ftp://adresse.