Aloha ;)
wenn ich erreichen will, dass eine Ressource nicht mit der passenden Anwendung geöffnet, sondern einfach nur gespeichert wird, greife ich gern zu einer schmutzigen, aber pragmatischen Lösung: Ich liefere sie mit dem Content-Type application/octet-stream aus.
Diese Lösung funktioniert zwar vordergründig, aber bei weitem nicht in allen Fällen; sie bringt ihre ganz eigenen Problemchen mit sich. Es ist halt nur ein Notbehelf.
das sehe ich nicht so; ich sehe das im Gegenteil als technisch bevorzugte Lösung, nur halt ein bisschen hinterhältig.
Technisch bevorzugte Lösung? Naja. Es ist ein Hack - man nutzt ein übliches Browserverhalten unter bestimmten Randbedingungen (hier der Standard-Mime-Typ für "unbekannt") aus, um zu erreichen, was man möchte.
Ich halte die anderen genannten Lösungswege für besser. Das Download-Attribut und der (von @Rolf B bereits genannte) Content-Disposition-Header sind für mich, was ich technisch bevorzugte Lösung nennen würde, denn sie sollen genau das tun, was man mit dem Hack erreicht.
Das download-Attribut hilft natürlich nicht, wenn man nur die URL hat - daher sollte man hier wirklich das Augenmerk auf Content-Disposition: attachment legen. Dieser Header tut genau das, was gefragt ist, ohne dabei ein Hack zu sein, der ggf. andere Dinge kaputt macht oder in der Zukunft zu jetzt noch unabsehbaren Schwierigkeiten führt.
Hacks sind gut, solang es keine andere, gleichartige Möglichkeit gibt, und/oder solange man auf andere Weise keine ausreichende Kompatibilität zu Browsern oder gar Funktionalität erreicht.
Die Browser-Unterstützung für Content-Disposition ist allerdings mittlerweile so breit, dass man getrost auf den Hack verzichten kann. Insofern ist Content-Disposition für mich die technisch bevorzugte Lösung.
Aber das war ja hier nicht das Thema.
Das ist einerseits richtig, andererseits sollte man Dinge (vor allem bei vergleichbarem Aufwand wie hier) besser gleich richtig machen. Es passiert zu oft, dass irgendwann Anforderungen oder Probleme entstehen, die man nicht vorhergesehen hat.
Okay. Aber das war in Jürgens Anwendungsfall alles nicht gefragt.
Das ist halt ein bissl wie die „Blinde wollen eh nicht auf meine Webseite“-Diskussion. Woher weiß man vorher, was ein User braucht oder will? Mag sein, dass hier nicht der Fokus auf diesen Dingen lag, aber das heißt nicht, dass sie deshalb egal sind.
Und selbst wenn man sich alle Optionen offenhalten möchte, kann man die Ressource immer noch mit dem "richtigen" Content-Type ausliefern und dem Besucher einen Hinweis geben, dass er das Ding mit einem Rechtsklick auf den Link und "Ziel speichern unter" auch lokal speichern kann.
Genau richtig! Es gibt also sogar eine built-in-Funktion, so dass bei fehlender Browser-Unterstützung von Content-Disposition trotzdem ein Download möglich ist. Content-Disposition ist dann klassisches Progressive Enhancement - was die alternative Verwendung des Hacks noch unnötiger macht.
Grüße,
RIDER
--
Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Albers-Zoller
#
Twitter #
Steam #
YouTube #
Self-Wiki #
Selfcode: sh:) fo:) ch:| rl:) br:^ n4:? ie:% mo:| va:) js:) de:> zu:} fl:( ss:) ls:[