vb.NET FTP Dateiupload

bleifresser

Mitglied
Hallo,

ich bin auf dem Gebiet vb.net noch etwas fremd. Ich habe mir ein kleines Programm gebaut, dass eine txt Datei auf einen festen FTP Server hochladen soll.
Der FTP Server ist mit Nutzername und Passwort geschützt.
Ich habe einige Lösungen im Netz gefunden, jedoch funktioniert bei mir keine. Deshalb poste ich hier mal den Code und hoffe auf eure kompetente Hilfe.

Code:
Public Sub connectFTP()
        Dim status As Boolean = False
        Dim myURI As String = "ftp://999.999.999.999"

        Dim requestStream As Stream = Nothing
        Dim fileStream As FileStream = Nothing
        Dim uploadResponse As FtpWebResponse = Nothing
        Dim ftpwr As FtpWebRequest = FtpWebRequest.Create(myURI)
        ftpwr.Method = WebRequestMethods.Ftp.UploadFile
        ftpwr.Credentials = New NetworkCredential("nutzer", "passwort")
        ftpwr.Proxy = Nothing

        requestStream = ftpwr.GetRequestStream()
        fileStream = File.Open("C:\output.txt", FileMode.Open)

        Dim buffer(1024) As Byte
        Dim bytesRead As Integer

        While True
            bytesRead = fileStream.Read(buffer, 0, buffer.Length)
            If bytesRead = 0 Then
                Exit While
            End If
        End While

       requestStream.Close()

        uploadResponse = ftpwr.GetResponse()

    End Sub
Die Serveradresse und die Zugangsdaten habe ich verändert. Ich bekomme die Meldung:
"Der angeforderte URI ist für diesen FTP-Befehl ungültig."

Ist wohl ein Denkfehler von mir, komm aber nicht drauf.

MfG Frank
 

Norbert Eder

Erfahrenes Mitglied
Also so sollte das durchaus funktionieren:
Code:
Dim req As WebRequest = FtpWebRequest.Create("ftp://01.test.com")
req.Credentials = New NetworkCredential("username", "password")
Dim requestStream As Stream = req.GetRequestStream()

Entsprechend der Fehlermeldung passt deine URI nicht, sprich die Adresse zu der du dich verbinden willst.

Des weiteren nutzt du den RequestStream nicht. Du schreibst da keine Daten hinein :)
 

bleifresser

Mitglied
Hi,

danke für deine Antwort, ich bin jedoch noch nicht weiter gekommen. Ich habe mir nochmals den Code einer Beispielklasse von Microsoft vorgenommen und mir einen FTP lokal auf meinem Rechner eingrichtet, es geht trotzdem nicht.

Code:
Public Sub Upload(ByVal fileName As String, ByVal uploadUrl As String)
        Dim requestStream As Stream = Nothing
        Dim fileStream As FileStream = Nothing
        Dim uploadResponse As FtpWebResponse = Nothing
        Try
            Dim uploadRequest As FtpWebRequest = WebRequest.Create(uploadUrl)
            uploadRequest.Method = WebRequestMethods.Ftp.UploadFile
            uploadRequest.Credentials = New NetworkCredential("test", "test")

            ' UploadFile is not supported through an Http proxy
            ' so we disable the proxy for this request.
            uploadRequest.Proxy = Nothing

            requestStream = uploadRequest.GetRequestStream()
            fileStream = File.Open(fileName, FileMode.Open)

            Dim buffer(1024) As Byte
            Dim bytesRead As Integer
            While True
                bytesRead = fileStream.Read(buffer, 0, buffer.Length)
                If bytesRead = 0 Then
                    Exit While
                End If
                requestStream.Write(buffer, 0, bytesRead)
            End While

            ' The request stream must be closed before getting the response.
            requestStream.Close()

            uploadResponse = uploadRequest.GetResponse()
            Console.WriteLine("Upload complete.")
        Catch ex As UriFormatException
            Console.WriteLine(ex.Message)
        Catch ex As IOException
            Console.WriteLine(ex.Message)
        Catch ex As WebException
            Console.WriteLine(ex.Message)
        Finally
            If uploadResponse IsNot Nothing Then
                uploadResponse.Close()
            End If
            If fileStream IsNot Nothing Then
                fileStream.Close()
            End If
            If requestStream IsNot Nothing Then
                requestStream.Close()
            End If
        End Try
    End Sub

Fehler:

Der angeforderte URI ist für diesen FTP-Befehl ungültig.
System.Net.FtpWebResponse
[...]
Eine Ausnahme (erste Chance) des Typs "System.Net.WebException" ist in System.dll aufgetreten.

Funktionsaufruf: ftpVerbindung.Upload("C:\output.txt", "ftp://127.0.0.1"). Den User Test mit dem selbigen Passwort gibt es auf meinem FTP und er darf in seinem Verzeichnis auch schreiben.

Der FTP gibt mir folgende Meldung:

Code:
(000006) 29.03.2007 08:05:24 - (not logged in) (127.0.0.1)> Connected, sending welcome message...
(000006) 29.03.2007 08:05:24 - (not logged in) (127.0.0.1)> 220-FileZilla Server version 0.9.20 beta
(000006) 29.03.2007 08:05:24 - (not logged in) (127.0.0.1)> 220-written by Tim Kosse (Tim.Kosse@gmx.de)
(000006) 29.03.2007 08:05:24 - (not logged in) (127.0.0.1)> 220 Please visit http://sourceforge.net/projects/filezilla/
(000006) 29.03.2007 08:05:24 - (not logged in) (127.0.0.1)> disconnected.
 
Zuletzt bearbeitet: