Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
"Echten" Dateinamen über HTTPWebresponse auslesen
UZI
myCSharp.de - Member



Dabei seit:
Beiträge: 189

Themenstarter:

"Echten" Dateinamen über HTTPWebresponse auslesen

beantworten | zitieren | melden

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.
Dieser Beitrag wurde 7 mal editiert, zum letzten Mal von UZI am .
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15.764

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
UZI
myCSharp.de - Member



Dabei seit:
Beiträge: 189

Themenstarter:

beantworten | zitieren | melden

Kurz gesagt für einen Download-Manager.
OK über Webresponse nicht. Aber es gibt doch sicher eine andere Möglichkeit?
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15.764

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
UZI
myCSharp.de - Member



Dabei seit:
Beiträge: 189

Themenstarter:

beantworten | zitieren | melden

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?
private Nachricht | Beiträge des Benutzers
Darth Maim
myCSharp.de - Member



Dabei seit:
Beiträge: 216

beantworten | zitieren | melden

Nein
private Nachricht | Beiträge des Benutzers
UZI
myCSharp.de - Member



Dabei seit:
Beiträge: 189

Themenstarter:

beantworten | zitieren | melden

=) Ok klare Antwort, dann steht immer noch die Frage, wie ich den Dateinamen zuverlässig auselsen kann.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15.764

beantworten | zitieren | melden

Bei ähnlichen DownloadManagern gibts pro Hoster ein Modul; wahrscheinlich hier individuelle Lösungen, je nach Fall.
private Nachricht | Beiträge des Benutzers
Darth Maim
myCSharp.de - Member



Dabei seit:
Beiträge: 216

beantworten | zitieren | melden

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.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Darth Maim am .
private Nachricht | Beiträge des Benutzers
UZI
myCSharp.de - Member



Dabei seit:
Beiträge: 189

Themenstarter:

beantworten | zitieren | melden

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!
private Nachricht | Beiträge des Benutzers
Floste
myCSharp.de - Member

Avatar #avatar-2376.jpg


Dabei seit:
Beiträge: 1.130
Herkunft: Norddeutschland

beantworten | zitieren | melden

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!
private Nachricht | Beiträge des Benutzers
UZI
myCSharp.de - Member



Dabei seit:
Beiträge: 189

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
Tomot
myCSharp.de - Member

Avatar #avatar-2678.jpg


Dabei seit:
Beiträge: 691
Herkunft: Düsseldorf

beantworten | zitieren | melden

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.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Tomot am .
mit freundlichen Grüßen,
Tomot

Projekte: www.gesellschaftsspieler-gesucht.de
private Nachricht | Beiträge des Benutzers
Coder007
myCSharp.de - Member



Dabei seit:
Beiträge: 1.214

beantworten | zitieren | melden

Zitat von UZI
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
private Nachricht | Beiträge des Benutzers