Benutzer mit den meisten Antworten
Download Original Datei Name

Frage
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
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
-
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
- Bearbeitet Stefan FalzModerator Samstag, 14. September 2013 11:20
-
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
-
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