none
Download Original Datei Name RRS feed

  • Frage

  • Hallo,

    Ich möchte gerne eine Datei mit meinem Programm Herunterladen. Wie man Dateien Herunterlädt weiß ich schon, aber ich weiß nicht wie ich den Original Datei Namen der Datei bekommen kann.

    Wie geht das ???

    Samstag, 14. September 2013 11:00

Antworten

  • Hallo,

    du hast ja irgendwo den Downloadpfad her. Beispielsweise mal den hier:
    http://code-13.net/Images/background.png
    Das background.png ist der Dateiname. Du kannst also den Downloadpfad am '/' aufsplitten und das letzte Element verwenden.

    Dim path As String = "http://code-13.net/Images/background.png"
    Dim fileName As String = path.Split("/"c).Last()
    Bei manchen Endungen etc. solltest du allerdings vorsichtig sein, da diese nicht immer dem eigentlichen Typ entsprechen. Als Beispiel das hier:
    http://code-13.net/Code/Captcha.aspx
    Captcha.aspx
    wäre der Dateiname. .ASPX ist aber keine Bilddatei. Wie man an den MimeType kommt (um die korrekte Dateiendung bestimmen zu können), kannst du hier oder hier heraus finden. In meiner Signatursteht ein Konverter, falls du mit dem C# nicht zurecht kommst.

    <Code-13/>- Koopakiller [kuːpakɪllɐ] (Tom Lambert)
    Webseite | Code Beispiele | Facebook | Twitter | Snippets   C# ↔ VB.NET Konverter
    Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.

    • Als Antwort markiert Tobpy Samstag, 14. September 2013 11:52
    Samstag, 14. September 2013 11:18
    Moderator

Alle Antworten

  • Hallo,

    du hast ja irgendwo den Downloadpfad her. Beispielsweise mal den hier:
    http://code-13.net/Images/background.png
    Das background.png ist der Dateiname. Du kannst also den Downloadpfad am '/' aufsplitten und das letzte Element verwenden.

    Dim path As String = "http://code-13.net/Images/background.png"
    Dim fileName As String = path.Split("/"c).Last()
    Bei manchen Endungen etc. solltest du allerdings vorsichtig sein, da diese nicht immer dem eigentlichen Typ entsprechen. Als Beispiel das hier:
    http://code-13.net/Code/Captcha.aspx
    Captcha.aspx
    wäre der Dateiname. .ASPX ist aber keine Bilddatei. Wie man an den MimeType kommt (um die korrekte Dateiendung bestimmen zu können), kannst du hier oder hier heraus finden. In meiner Signatursteht ein Konverter, falls du mit dem C# nicht zurecht kommst.

    <Code-13/>- Koopakiller [kuːpakɪllɐ] (Tom Lambert)
    Webseite | Code Beispiele | Facebook | Twitter | Snippets   C# ↔ VB.NET Konverter
    Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.

    • Als Antwort markiert Tobpy Samstag, 14. September 2013 11:52
    Samstag, 14. September 2013 11:18
    Moderator
  • Hi,

    mit "Originaldateiname" meinst Du das genau? Den Dateiennamen, den Du eigentlich angefordert hast oder den Dateinamen, den der Server letztendlich ausliefert?

    Ersteres weißt Du ja, da Du die Datei angefordert hast. Also kannst Du diesen Dateinamen auch übernehmen.

    Wenn Du wissen willst, was der Server da letztendlich ausliefert, muss man wissen, dass das unter Umständen nicht ermittelbar ist. Es gibt viele Optionen, von serverseitigen Umleitungen, dynamischer Auslieferung durch Skripte, ... die es teils notwendig machen, dass der Serverbetreiber die Information explizit mitgibt. Tut er das nicht, kommst Du auch nicht an den Dateinamen ran.

    Man kann probieren, über <WebClient>.ResponseHeaders[ "content-disposition" ] den Dateinamen auszulesen.

      http://msdn.microsoft.com/de-de/library/system.net.webclient.responseheaders.aspx

    Da wird bspw. sowas geliefert:

      "attachment; filename=Dateiname.xls"

    oder auch

      "inline; filename=Dateiname.xls"

    Es gibt auch Skripte, die hier (fälschlicherweise) sowas liefern:

      "attachment; filename=Pfad\Irgendwo\Abc\Dateiname.xls"

    Letztendlich musst Du also schauen, ob im genannten ResponseHeader filename= vorkommt. Falls ja, schneide den Inhalt ab dem = bis zum nachfolgenden " aus. Über Path.GetFileName( "..." ) kannst Du dann den Dateinamen an sich ermitteln. Es kann sein, dass am Ende noch ein Semikolon o.ä. steht, das musst Du dann noch entfernen.

    ---

    Wenn eine Umleitung (Redirect) durchgeführt wird, findest Du in den ResponseHeaders einen Header "Location". Den kannst Du dann auslesen und ebenfalls über Path.GetFileName( ... ) den Dateinamen ermitteln.

    ---

    Schlägt auch das fehl, müsstest Du es mit dem Content-Type Header probieren. Dort wird ggfs. der  MimeType für die gesendete Datei übergeben, bspw. "application/vnd.ms-excel" für Excel, ... Damit kann man dann versuchen, anhand einiger bekannter Mimetypen auf die Dateiendung zu schließen.

    ---

    Evtl. hilft dir auch dieser Beitrag, der User Daniel dort hat in der Antwort die o.g. Sachen teils schon in Code umgesetzt.

      http://stackoverflow.com/questions/13570839/get-filename-without-content-disposition


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community


    Samstag, 14. September 2013 11:19
    Moderator
  • Ich habe es so gemacht und es scheint zu klappen :)

                      Dim path As String = My.Settings.dev ' Hier ist der DownloadLink drinne
                        Dim fileName As String = path.Split("/"c).Last() ' Hier splitte ich den Link zur gewünschten Stelle
                        Dateinamez.Text = My.Settings.devversion.Split(" : ")(0) & My.Settings.devversion.Split(":")(1) & fileName ' Hier füge ich noch Manuele Dinge dazu
                        Dateiname2.Text = Dateinamez.Text.Replace(" ", "") ' Hiermit entnehme ich die Leerstelle um spätere Fehler vorzubeugen
                        My.Settings.devdownname = Dateiname2.Text ' Hier speichere ich den Link dann jetzt endlich
                        My.Settings.Save()

    PS: mit Hilfe von Koopakiller
    • Bearbeitet Tobpy Samstag, 14. September 2013 11:57
    Samstag, 14. September 2013 11:56
  • Hi,

    nur noch als Anmwerkung:

    Du musst nicht für alle Stringverarbeitungen TextBoxen anlegen (und solltest das auch nicht, wenn Du die nur dafür brauchst).

    Sinnvoller ist es, weiterhin mit String Variablen zu arbeiten und dann am Schluss deren Inhalt an <TextBox>.Text zuzuweisen.

    Ich schreib das nur, weil mir bei deinen bisherigen Postings aufgefallen ist, dass Du öfter mal TextBox Controls erzeugst/verwendest, obwohl man meinen könnte, dass die nur für Stringverarbeitungen verwendet werden. Sollte ich da falsch liegen, sorry.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Samstag, 14. September 2013 12:03
    Moderator