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
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 👍
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
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 ?
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.
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.