Laden...

"Echten" Dateinamen über HTTPWebresponse auslesen

Erstellt von UZI vor 12 Jahren Letzter Beitrag vor 12 Jahren 4.126 Views
U
UZI Themenstarter:in
189 Beiträge seit 2011
vor 12 Jahren
"Echten" Dateinamen über HTTPWebresponse auslesen

Hallo mycsharp.de,
man kann den Dateinamen ja entweder über den Link auslesen (nach dem letzten /) oder mit dem Header von Httpwebresponse. Aber das klappt nicht immer. Beispielsweise bei Fileshareanbietern wird nicht der echte Dateiname geliefert, und die URL sagt auch nichts über den Namen aus.
Frage: Wie kann ich auch von solchen Dateien den Namen zuverlässig auslesen?
Beispielurl

Danke für Antworten.

16.827 Beiträge seit 2008
vor 12 Jahren

Je nachdem wie bzw. über welche Variante der Webserver einen Download anbietet, funktioniert es eben über WebResponse nicht.
Aber Gegenfrage: wozu brauchst Du das?

Wenn Du nicht die Rechte an dem Upload des Teils hast, bitte ich Dich den Link durch eine andere Beispieldatei zu erläutern, an denen Du die nötigen Urheberrechte hast.

U
UZI Themenstarter:in
189 Beiträge seit 2011
vor 12 Jahren

Kurz gesagt für einen Download-Manager.
OK über Webresponse nicht. Aber es gibt doch sicher eine andere Möglichkeit?

16.827 Beiträge seit 2008
vor 12 Jahren

Schon mal den "content-disposition" Wert aus dem ResponseHeader ausgelesen; oder meinst Du das mit dem HttpWebResponse? Wenn ja: was meinst Du dann mit "echten" Namen? Der Name, der im "Speichern unter"-Fenster angezeigt wird, ist in der Regel aus diesem Wert entstanden.

U
UZI Themenstarter:in
189 Beiträge seit 2011
vor 12 Jahren

Ok, bei dem Beispiellink funktioniert es zwar nicht über content-disposition, aber es steht im eigentlichen Downloadlink, den megaupload generiert, hinter dem letzten /.
Kann man davon ausgehen, dass der Dateiname bei jedem generierten Link von Servern in der URL steht?

D
216 Beiträge seit 2009
vor 12 Jahren

Nein

U
UZI Themenstarter:in
189 Beiträge seit 2011
vor 12 Jahren

=) Ok klare Antwort, dann steht immer noch die Frage, wie ich den Dateinamen zuverlässig auselsen kann.

16.827 Beiträge seit 2008
vor 12 Jahren

Bei ähnlichen DownloadManagern gibts pro Hoster ein Modul; wahrscheinlich hier individuelle Lösungen, je nach Fall.

D
216 Beiträge seit 2009
vor 12 Jahren

Ich würde auch für die einzelnen bekannten Hoster eine individuelle Lösung machen, wenns keiner von denen ist versuchen den Namen aus Content-Disposition auszulesen, und wenn da immer noch nichts drin ist würde ich einfach die URL nehmen, zum Beispiel "<domain>/<dateiname>", auch wenn das dann auf Dateinamen wie "beispiel.de/download.php" hinauslaufen könnte.

Darth Maim

Edit:
Man könnte den User bei unbekanntem Dateinamen fragen, mit welchen Namen die Datei gespeichert werden soll, oder dem User die Möglichkeit geben für unterschiedliche Domains Regeln anzulegen, wie die Datei benannt werden soll. Wenn der User dann "[GET:filename]_v[GET:version].[GET:fileextension]" für die Domain beispiel.de angibt, könnte dein DownloadManager die Datei unter der Adresse "beispiel.de/download.php?filename=test&version=281&filextension=.txt&foo=bar" unter dem Namen "text_v281.txt" speichern. Und zusätzlich zu [GET:xxx] kannst du dann auch noch [domain], [timestamp], ... anbieten. Nur so eine Idee.

U
UZI Themenstarter:in
189 Beiträge seit 2011
vor 12 Jahren

Ja, dass hatte ich mich schon gedacht naja, im Grunde ist es ja eine relativ hohe Wahrscheinlichkeit den richtigen Namen auslesen zu können.
Danke!

1.130 Beiträge seit 2007
vor 12 Jahren

Eigendlich ist es doch immer das gleiche:

Die header der response angucken und prüfen ob "Content-Disposition" vorhanden ist.
Wenn vorhanden: Dateinamen aus dem wert des headers auslesen: Z.B. sollte die zweite gruppe des matches von folgendem regex den dateinamen enthalten (ignorecase setzen): "(|;) *filename *=([;]+)"
Wenn so kein dateiname gefunden wurde, dann ist der dateiname der teil von HttpWebResponse.ResponseUri.AbsolutePath, der nach dem letzten schrägstrich kommt.

Projekte:Jade, HttpSaver
Zum Rechtschreiben gibts doch schon die Politiker. Aber die bauen auch nur mist!

U
UZI Themenstarter:in
189 Beiträge seit 2011
vor 12 Jahren

Problem ist nur das "content-disposition" nicht entweder nichts, oder den Dateinamen sondern manchmal "attachment" + leerstelle + dateiname oder "attachment" + dateiname oder nur den Dateinamen. Man kann nicht so genau sagen was in diesem Header drinsteht. Anscheinend muss man es wohl tatsächlich für jeden Hoster individuell machen.

691 Beiträge seit 2007
vor 12 Jahren

Schau dir doch einfach mit einem Paketsniffer (z.B. Wireshark) an, was passiert, wenn du manuell bei Megaupload einen Download tätigst, bevor wir hier weiter rumrätseln, was in den Headerdaten des Responses drin steht oder nicht.

Die vom .net Framework bereitgestellten Klassen können auch nichts anderes als Informationen aus HTTP Befehlen (Header + Body) lesen bzw. schreiben.

mit freundlichen Grüßen,
Tomot

Projekte: www.gesellschaftsspieler-gesucht.de

C
1.214 Beiträge seit 2006
vor 12 Jahren

Problem ist nur das "content-disposition" nicht entweder nichts, oder den Dateinamen sondern manchmal "attachment" + leerstelle + dateiname oder "attachment" + dateiname oder nur den Dateinamen.

Zumindest wie das Feld aufgebaut ist, ist definiert:

RFC 2183