Probleme mit upload auf FTP-Server

  • VB.NET (ASP)

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von markusbreitenstein.

    Probleme mit upload auf FTP-Server

    Hallo Forum

    Ich habe auf meiner Website ein Formular, mit welchem ich daten auf einen FTP-Server laden will. dazu der Code:

    VB.NET-Quellcode

    1. Try
    2. Using client As WebClient = New WebClient()
    3. client.Credentials = New NetworkCredential("markus", "Ramires1")
    4. client.UploadFile(temp, "STOR", Path.GetFileName(UPLOAD_1.FileName))
    5. End Using
    6. Catch ex As UriFormatException
    7. STAT_URI.Text = ex.ToString
    8. Catch ex As IOException
    9. STAT_IO.Text = ex.ToString
    10. Catch ex As WebException
    11. STAT_WEB.Text = ex.ToString
    12. Catch ex As Exception
    13. STAT_EX.Text = ex.ToString
    14. Finally
    15. If uploadResponse IsNot Nothing Then
    16. uploadResponse.Close()
    17. End If
    18. If fileStream IsNot Nothing Then
    19. fileStream.Close()
    20. End If
    21. If requestStream IsNot Nothing Then
    22. requestStream.Close()
    23. End If
    24. End Try
    25. End If


    Wenn ich nun hochladen will bekomme ich einen fehler:

    System.Net.WebException: Ausnahmefehler während einer WebClient-Anforderung. ---> System.IO.FileNotFoundException: Die Datei "C:\Windows\SysWOW64\inetsrv\006.mp4" konnte nicht gefunden werden. bei System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) bei System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) bei System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access) bei System.Net.WebClient.OpenFileInternal(Boolean needsHeaderAndBoundary, String fileName, FileStream& fs, Byte[]& buffer, Byte[]& formHeaderBytes, Byte[]& boundaryBytes) bei System.Net.WebClient.UploadFile(Uri address, String method, String fileName) --- Ende der internen Ausnahmestapelüberwachung --- bei System.Net.WebClient.UploadFile(Uri address, String method, String fileName) bei System.Net.WebClient.UploadFile(String address, String method, String fileName) bei Video.BTN_UPLOAD_Click(Object sender, EventArgs e) in C:\inetpub\wwwroot\ULE\Admin_Video.aspx.vb:Zeile 66.

    Wenn ich das richtig verstehe, finder er das file beim Client nicht....

    Gibt es eine Möglichkeit, den absoluten Pfad beim Client zu lesen und in den code ein zu bauen?

    vielen dank
    Am lernen...
    Hallo @petaod

    Die Datei liegt auf dem Desktop des Client, 006.mp4 ist ihr Name.
    Die temp - Vriable wird wie folgt befüllt:

    VB.NET-Quellcode

    1. If UPLOAD_1.FileName IsNot Nothing Then
    2. Dim temp = "ftp://www.breitenstein.ag/" + Path.GetFileName(UPLOAD_1.FileName)


    Vollzitat durch Anredefunktion ersetzt ~VaporiZed
    Am lernen...

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    Hallo @petaod

    Code angepasst bei:

    VB.NET-Quellcode

    1. client.UploadFile(temp, "STOR", Path.GetFullPath(UPLOAD_1.FileName))​


    Dannach habe ich den Pfad in ein Label gesetzt zur Kontrolle:

    VB.NET-Quellcode

    1. ​Label7.Text = Path.GetFullPath(UPLOAD_1.FileName)


    Resultat = C:\Windows\SysWOW64\inetsrv\006.mp4

    Also das selbige...

    Ich habe mit mehreren Dateien an verschiedenen speicherorten getestet, immer das selbe.

    der normale upload für Dateien unter 10 MB klappt aber problemlos mit folgendem Befehl:

    VB.NET-Quellcode

    1. If UPLOAD_2.HasFile Then
    2. Dim savepath2 As String = Server.MapPath("~/Video/") + (UPLOAD_2.FileName).ToString
    3. If System.IO.File.Exists(savepath2) = True Then
    4. System.IO.File.Delete(savepath2)
    5. End If
    6. UPLOAD_2.SaveAs(savepath2)
    7. End If
    Am lernen...
    ​Resultat = C:\Windows\SysWOW64\inetsrv\006.mp4


    Dann liegt sie nicht auf dem Desktop oder wird tatsächlich nicht dort gefunden.
    Deshalb wollte ich ja wissen, wie UPLOAD_1 tatsächlich befüllt wird. Nicht, dass du dort einen Pfad reinbringst, der in einem anderen Arbeitsverzeichnis liegt.

    Deshalb versuch mal, das ganze Hard zu codieren (also c:\...\...\Desktop\006.mp4) [Tipp:

    Quellcode

    1. ​Environment.GetFolderPath(Environment.SpecialFolder.Desktop)
    bringt dich direkt zum Desktop]
    Wenn es hard gecoded funktioniert, solltest du mal überprüfen, wie sich der Pfad (FileName) deines UPLOAD_1 im Laufe des Programms verhält und ggf. verändert
    @PadreSperanza
    Hab das mal so eingebaut, Resultat war ein leeres Feld. Ich vermute mal stark, das der CodeBehind vom Server schlicht keinen zugriff auf die Verzeichnissstruktur vom Client hat, da müsste man wohl was mit Java machen, ist aber so richtig nicht mein Gebiet...
    Am lernen...
    Also auch

    Quellcode

    1. Label7.Text = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) & "\006.mp4"


    Um zu überprüfen, ob der Pfad auch korrekt angezeigt wird? Denn wenn dieser richtig ist und das dann dennoch nicht geöffnet werden kann, dann darf vermutlich wirklich nicht darauf zugegriffen werden.
    8| ich bin auch ein Troll...

    Vorweg: Du nutzt den Code ja auf einem Clienten, nicht auf dem Server, richtig?

    Der Code von mir war (oder viel mehr ist) falsch. Es muss lauten:

    Quellcode

    1. ​Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory)


    Das Problem ist, dass SpecialFolder.Desktop nicht den physischen, sondern logischen Desktop wiedergibt. Der Logische Desktop ist aber nicht der, wo physikalisch deine Daten liegen. Deshalb ist der natürlich leer...

    Mittels SpecialFolder.DesktopDirectory solltest du den Pfad (C:\Users\<User>\Desktop bekommen und dann sollte der Pfad auch nicht mehr in die Leere führen
    @PadreSperanza

    Also.. nochmal Versucht, Resultat bleibt das selbe. Ich gehe davon aus das es Serverseitig nicht machbar ist... also müsste ich Clientseitig was machen, mit Java oder so...

    Mit UPLOAD_".SaveAs klappt es übrigens, das geht aber nur für Dateien unter 1 GB....

    Schade drum
    Am lernen...

    markusbreitenstein schrieb:

    Ich vermute mal stark, das der CodeBehind vom Server schlicht keinen zugriff auf die Verzeichnissstruktur vom Client hat


    Braucht man Serverseitig auch nicht, ich würde dir einfach mal empfehlen anstatt mit einem WebClienten zu arbeiten, es mal mit einem WebRequest zu versuchen. Da wird dir sofort bewusst warum der Server keinen Zugriff auf das Filesystem des Clienten braucht. ;) Extra was mit Java zaubern brauchste nicht, ist mit VB machbar.
    docs.microsoft.com/de-de/dotne…t.webrequest?view=net-5.0

    markusbreitenstein schrieb:

    Ich gehe davon aus das es Serverseitig nicht machbar ist


    Genau deshalb hatte ich vorher nochmal gefragt, ob du das Clientseitig machst :D Also haben wir tatsächlich aneinander vorbei geredet, denn der SpecialFolder.DesktopDirectory ist tatsächlich nur clientseitig nutzbar
    Einfach dran bleiben, mit einem WebRequest ist zwar mehr Code zu schreiben als mit einem WebClienten, aber es lohnt sich. Wenn du nicht weiterkommst, sag einfach Bescheid, dann finden wir eine Lösung. Versuch erstmal am Stück hochzuladen/runterzuladen, danach mit stop und wiederaufnahme. Du hattest ja auch ein Problem mit grossen Dateien, das man so umgehen kann.

    markusbreitenstein schrieb:

    der normale upload für Dateien unter 10 MB klappt aber problemlos mit folgendem Befehl:


    Wirklich? Die Datei löscht du doch via code vorher, wenn sie existiert.

    @markusbreitenstein
    Möglicherweise habe ich da was falsch verstanden, was macht SaveAs? Was ist UPLAOD_2?



    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „Takafusa“ ()