Datei herunterladen _ mit format=csv

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Alex-Digital.

    Datei herunterladen _ mit format=csv

    Heyho,
    Ich habe ein Problem nämlich möchte ich eine Datei herunterladen welche auf folgendem Beispiellink existiert:

    dasistmeinserver.com/report/table_export?format=csv

    Wenn ich auf diese Seite im Browser navigiere startet direkt der download bzw. kommt die Meldung wollen sie die Datei öffnen / Speichern.

    Wenn ich aber nun versuche mittels normalen HTTP Request herunterzuladen lädt er nicht die Tabelle sondern die Seite herunter die den export ausführt..
    Wie bekomme ich nun aber die csv Datei heruntergeladen? :D

    Mein Code sieht wie folgt aus:

    VB.NET-Quellcode

    1. Dim lRequest As Net.HttpWebRequest
    2. Dim lResponse As Net.HttpWebResponse
    3. Dim lUrl As New Uri("https://dasistmeinserver.com/report/table_export?format=csv")
    4. Dim lLocal As String = "test.csv"
    5. lRequest = CType(Net.HttpWebRequest.Create(lUrl), Net.HttpWebRequest)
    6. Try
    7. lResponse = CType(lRequest.GetResponse(), Net.HttpWebResponse)
    8. If lResponse.StatusCode = Net.HttpStatusCode.OK Then
    9. Dim lReader As IO.Stream = lResponse.GetResponseStream()
    10. Dim lWriter As New IO.FileStream(lLocal, IO.FileMode.Create)
    11. Dim lLength As Long
    12. Dim lBytes(256) As Byte
    13. Do
    14. lLength = lReader.Read(lBytes, 0, lBytes.Length)
    15. lWriter.Write(lBytes, 0, CInt(lLength))
    16. Loop While lLength > 0
    17. lWriter.Close()
    18. lReader.Close()
    19. Else
    20. MsgBox(String.Format("Server returned: {0} {1}", _
    21. lResponse.StatusCode, lResponse.StatusDescription))
    22. End If
    23. Catch ex As Exception
    24. MsgBox(ex.Message, MsgBoxStyle.Critical)
    25. End Try


    Dies funktionier jedoch nur wenn die Datei auf dem Server liegt also der URL wiefolgt aussehen würde:
    dasistmeinserver.com/report/table.csv

    Ich hoffe es kann mir wer helfen :)

    Grüße xkiopelx
    C & P Bremse FTW <33

    xkiopelx schrieb:

    welche auf folgendem Beispiellink existiert:
    Dieser Link funktioniert leider nicht.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ja ist ja auch nur ein beispiel^^

    Das wäre der Originallink:

    mxt.smsglobal.com/report/sms-outgoing-export?format=csv

    jedoch muss man dafür angemeldet sein..
    falls es wer testen will:

    hier kann man sich registrieren:

    smsglobal.com/sign-up/

    Nach längerem googlen bin ich auf folgenden Code gestoßen:

    VB.NET-Quellcode

    1. Public Sub ServeReport(ByVal URL As String, _
    2. ByVal Directory As String, ByVal Filename As String)
    3. Dim f As New Security.Permissions.FileIOPermission(PermissionState.None)
    4. Dim fs As FileStream
    5. If Not System.IO.Directory.Exists(Directory) Then
    6. System.IO.Directory.CreateDirectory(Directory)
    7. End If
    8. DownloadWebFile(URL, Directory & Filename)
    9. fs = File.Open(Directory & Filename, FileMode.Open)
    10. Dim bytBytes(CInt(fs.Length)) As Byte
    11. fs.Read(bytBytes, 0, CInt(fs.Length))
    12. fs.Close()
    13. Response.AddHeader("Content-disposition", _
    14. "attachment; filename=" & Filename)
    15. Response.ContentType = "application/octet-stream" 'wäre bei mir Content-Type: text/csv
    16. Response.BinaryWrite(bytBytes)
    17. f.AllLocalFiles = FileIOPermissionAccess.AllAccess
    18. File.Delete(Directory & Filename)
    19. End Sub
    20. Public Shared Sub DownloadWebFile(ByVal URL As String, _
    21. ByVal DestFilename As String)
    22. 'Create a web request to attach to the remote file
    23. Dim WebFile As System.Net.WebRequest
    24. 'Create a file stream for writing the file to the local filename
    25. Dim LocalFile As System.IO.FileStream
    26. 'Create some working variables for the copy process
    27. Dim Buffer(16384) As Byte
    28. Dim BytesRead As Long
    29. 'Open a WebRequest stream to the source file
    30. WebFile = System.Net.WebRequest.Create(URL)
    31. 'Credentials are required, pass the defaults
    32. WebFile.Credentials = System.Net.CredentialCache.DefaultCredentials
    33. 'Create the local file
    34. LocalFile = New IO.FileStream(DestFilename, IO.FileMode.Create)
    35. 'Download the file in 16k chunks
    36. With WebFile.GetResponse.GetResponseStream
    37. Do
    38. BytesRead = .Read(Buffer, 0, 16384)
    39. LocalFile.Write(Buffer, 0, CInt(BytesRead))
    40. Loop Until BytesRead = 0
    41. .Close()
    42. End With
    43. WebFile = Nothing
    44. 'Force all data out of memory and into the file before closing
    45. LocalFile.Flush()
    46. LocalFile.Close()
    47. LocalFile = Nothing
    48. End Sub


    Problem ist, ich verstehe von dem Code eher weniger und finde nicht heraus was das Response machen soll bzw. ist nicht deklariert. die response meiner normalen webrequest hat nicht diese Attribute.. Bin noch eher neu auf dem Gebiet.

    Fehler liegt nur in der ersten Methode bei Response. Kann es sein dass der Code für ASP.Net oder so ist?
    C & P Bremse FTW <33

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „xkiopelx“ ()

    Hallo,

    Google: vb.net download file web request - 2. Treffer: stackoverflow.com/questions/67…brequest-to-download-file

    Weiß nicht, ob der bei deiner Seite auch geht, aber der Code ist jetzt nicht der schwerste, weil wenn man ein bisschen Englisch kann, dann geht das schon.

    Ich hoffe, ich konnte dir helfen.

    MFG

    Alex-Digital :D
    ~ Alex-Digital :D

    if(!Internet.VBP.Get<User>("Alex-Digital").IsOnline) this.Close(); :D