WebDAV-Server Upload/Download

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Mono.

    WebDAV-Server Upload/Download

    Hallo erstmal...

    Ich habe ein Problem, oder eher ein Frage.

    Ich habe ein kleines Programm geschrieben, mit dem Man auf einen WebDAV-Server zugreifen soll
    und von dort Dateien herunter laden bzw, Dateien auf diesen hochladensoll.

    Ich habe schon im Windows SkyDrive-Forum gefragt aber dort scheinen Sie meine Frage nicht zu vertsehen.

    Weiß vielleicht jemand von euch einen Rat?

    Hier der Link zu meinem Programm:

    WebDAVFile Transfer

    Vielen Dank schonmal im Vorraus :)
    Joel
    Und was genau ist das Problem ?
    Was hast du denn schon , abgesehen von einer GUI.
    (Wobei ich mich ehrlich Frage, wieso man dieses Tool benutzen soll, ich würde ja zumindest einen Filebrowser für die WebDav Ordner/Datein oder ähnliches erwarten).
    Das ist meine Signatur und sie wird wunderbar sein!
    Hei Mono,

    Generel habe ich den ganzen code dahinter schon.
    Mein Problem ist es jetzt, dass ich nicht weiß, wie ich den genauen pfad auf den Server bekomme.

    Und das Tool soll nachher in ein Programm implementiert werden, das dann auf diesen Datein hochladen und herunterladen kann.
    Zum testen, habe ich mir aber erstmal ein extra Projekt dafür erstellt.

    Hier folgen noch Codes für Upload und Download.

    Upload:

    VB.NET-Quellcode

    1. Private Sub btnUpload_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUpload.Click
    2. If txtFileToUpload.Text = "" Or txtServerPathUpload.Text = "" Then
    3. MessageBox.Show("Es wurde kein Dateipfad bzw. Serverpfad angegeben!", "Kein Pfad angegeben", MessageBoxButtons.OK, MessageBoxIcon.Warning)
    4. Exit Sub
    5. End If
    6. Dim strFileToUpload As String = txtFileToUpload.Text
    7. Dim lngFileLength As Long = My.Computer.FileSystem.GetFileInfo(strFileToUpload).Length
    8. Dim strURL As String = txtServerPathUpload.Text
    9. Dim strPort As String = txtPortUpload.Text
    10. Dim strUsername As String = txtUsernameUpload.Text
    11. Dim strPassword As String = txtPasswordUpload.Text
    12. If strPort <> "" Then
    13. Dim u As New Uri(strURL)
    14. Dim strHost As String = u.Host
    15. strURL = strURL.Replace(strHost, strHost & ":" & strPort)
    16. End If
    17. strURL = strURL.TrimEnd("/"c) & "/" & IO.Path.GetFileName(strFileToUpload)
    18. Dim request As HttpWebRequest = DirectCast(HttpWebRequest.Create(strURL), HttpWebRequest)
    19. request.Credentials = New NetworkCredential(strUsername, strPassword)
    20. request.Method = WebRequestMethods.Http.Put
    21. request.ContentLength = lngFileLength
    22. request.SendChunked = True
    23. request.Headers.Add("Translate: f")
    24. request.AllowWriteStreamBuffering = True
    25. Dim s As IO.Stream = request.GetRequestStream
    26. Dim fs As New IO.FileStream(strFileToUpload, IO.FileMode.Open, IO.FileAccess.Read)
    27. Dim byteTransferRate As Integer = 1024
    28. Dim bytes(byteTransferRate - 1) As Byte
    29. Dim bytesRead As Integer = 0
    30. Dim totalBytesRead As Long = 0
    31. pgbUpload.Minimum = 0
    32. pgbUpload.Maximum = CInt(lngFileLength \ byteTransferRate)
    33. pgbUpload.Value = 0
    34. Do
    35. bytesRead = fs.Read(bytes, 0, bytes.Length)
    36. If bytesRead > 0 Then
    37. totalBytesRead += bytesRead
    38. s.Write(bytes, 0, bytesRead)
    39. pgbUpload.Value = CInt(totalBytesRead \ byteTransferRate)
    40. If pgbUpload.Value Mod 500 = 0 Then _
    41. Application.DoEvents()
    42. End If
    43. Loop While bytesRead > 0
    44. s.Close()
    45. s.Dispose()
    46. s = Nothing
    47. fs.Close()
    48. fs.Dispose()
    49. fs = Nothing
    50. Dim response As HttpWebResponse = DirectCast(request.GetResponse(), HttpWebResponse)
    51. Dim code As HttpStatusCode = response.StatusCode
    52. response.Close()
    53. response = Nothing
    54. If totalBytesRead = lngFileLength AndAlso code = HttpStatusCode.Created Then
    55. MessageBox.Show("Der Upload war erfolgreich", "Upload abgeschlossen", MessageBoxButtons.OK, MessageBoxIcon.Information)
    56. Else
    57. MessageBox.Show("Der Upload ist fehlgeschalgen", "Upload fehlgeschlagen", MessageBoxButtons.OK, MessageBoxIcon.Warning)
    58. End If
    59. End Sub


    Download:

    VB.NET-Quellcode

    1. Private Sub btnDownload_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDownload.Click
    2. Dim strUrl As String = txtFileToDownload.Text
    3. Dim strPort As String = txtPortDownload.Text
    4. Dim strUsername As String = txtUsernameDownload.Text
    5. Dim strPassowrd As String = txtPasswordDownload.Text
    6. Dim strSavePath As String = txtSavePathDownload.Text
    7. If strUrl = "" Or strSavePath = "" Then
    8. MessageBox.Show("Es wurde kein Dateipfad bzw. Serverpfad angegeben!", "Kein Pfad angegeben", MessageBoxButtons.OK, MessageBoxIcon.Warning)
    9. Exit Sub
    10. End If
    11. If strPort <> "" Then
    12. Dim u As New Uri(strUrl)
    13. Dim strHost As String = u.Host
    14. strUrl = strUrl.Replace(strHost, strHost & ":" & strPort)
    15. End If
    16. Dim request As HttpWebRequest = DirectCast(HttpWebRequest.Create(strUrl), HttpWebRequest)
    17. request.Credentials = New NetworkCredential(strUsername, strPassowrd)
    18. request.Method = WebRequestMethods.Http.Get
    19. request.SendChunked = True
    20. request.Headers.Add("Translate: f")
    21. Dim response As HttpWebResponse = DirectCast(request.GetResponse, HttpWebResponse)
    22. Dim bytesTransferRate As Integer = 4096
    23. Dim bytes(bytesTransferRate - 1) As Byte
    24. Dim bytesRead As Integer = 0
    25. Dim totalBytesRead As Long = 0
    26. Dim lngFileLength As Long = 0
    27. lngFileLength = CLng(response.GetResponseHeader("Content-Length"))
    28. pgbDownload.Minimum = 0
    29. pgbDownload.Maximum = CInt(lngFileLength \ bytesTransferRate)
    30. pgbDownload.Value = 0
    31. Dim fs As New IO.FileStream(strSavePath, IO.FileMode.Create, IO.FileAccess.Write)
    32. Dim s As IO.Stream = response.GetResponseStream
    33. Do
    34. bytesRead = s.Read(bytes, 0, bytes.Length)
    35. If bytesRead > 0 Then
    36. totalBytesRead += bytesRead
    37. fs.Write(bytes, 0, bytesRead)
    38. If pgbDownload.Value Mod 500 = 0 Then _
    39. Application.DoEvents()
    40. End If
    41. Loop While bytesRead > 0
    42. s.Close()
    43. s.Dispose()
    44. s = Nothing
    45. fs.Close()
    46. fs.Dispose()
    47. fs = Nothing
    48. response.Close()
    49. response = Nothing
    50. If totalBytesRead = lngFileLength Then
    51. MessageBox.Show("Der Download war erfolgreich", "Download abgeschlossen", MessageBoxButtons.OK, MessageBoxIcon.Information)
    52. Else
    53. MessageBox.Show("Der Download ist fehlgeschalgen", "Download fehlgeschlagen", MessageBoxButtons.OK, MessageBoxIcon.Warning)
    54. End If
    55. End Sub
    Hi

    Du hast also den Code hier nahezu eins zu eins genommen ;)
    Soviel kann ich dazu sagen:
    Das funktioniert prinzipiell;)

    Mein Problem ist es jetzt, dass ich nicht weiß, wie ich den genauen pfad auf den Server bekomme.

    Was genau meinst du damit ?

    Den Pfad zum Server musst du ja in der Textbox angeben..
    Dazu benötigst du natürlich einen WebDav Order irgendwo.

    Versuch mal dein Problem genau auszudrücken..


    Gruss Mono
    Das ist meine Signatur und sie wird wunderbar sein!

    Mono schrieb:


    Den Pfad zum Server musst du ja in der Textbox angeben..
    Dazu benötigst du natürlich einen WebDav Order irgendwo.


    Ic habe von Windows Live ein SkyDrive-Ordner. Diese sollten meiner Information nach WebDAV-Server sein.

    Nun würde ich gerne den Pfad zur SkyDrive haben, da der Link zum Server aus der Adresszeile im Browser nicht funktioniert. ?(

    Grüße Joel