PDF Downloaden
Melina
- programmiertechnik
Guten Abend,
ich möchte auf meiner Seite ein PDF einbinden. Wenn ich auf einen Link klicke soll die PDF herunter geladen werden und _nicht_ im Browser geöffnet. Wie kann ich dieses verhalten erzwingen?
Guten Abend,
ich möchte auf meiner Seite ein PDF einbinden. Wenn ich auf einen Link klicke soll die PDF herunter geladen werden und _nicht_ im Browser geöffnet. Wie kann ich dieses verhalten erzwingen?
Sende die Header
"Content-Type" => "application/pdf",
"Content-Disposition" => qq(Attachment; filename="asdf.pdf"),
"Content-Length" => 4711,
MfG
Hallo,
Sende die Header
"Content-Type" => "application/pdf",
"Content-Disposition" => qq(Attachment; filename="asdf.pdf"),
"Content-Length" => 4711,
das heißt, ich lege eine Datei mit dem Namen "download.php" und in diese kommt dieser Code von dir und bei filename fügen ich $_GET["file"]
.pdf ein, da der Link auf die PDF dann so lauten würde "download.php?file=01" richtig?
Hallo,
Sende die Header
"Content-Type" => "application/pdf",
"Content-Disposition" => qq(Attachment; filename="asdf.pdf"),
"Content-Length" => 4711,das heißt, ich lege eine Datei mit dem Namen "download.php" und in diese kommt dieser Code von dir und bei filename fügen ich
$_GET["file"]
.pdf ein, da der Link auf die PDF dann so lauten würde "download.php?file=01" richtig?
Na, ein bischen kontrollierter sollte das schon ablaufen. Nehmen wir mal an, es gäbe auf der Seite nur einen Link zum Download, dann genügt es, einen Parameter zu setzen (Wert beliebig):
%url%?download=1
Kontrollstruktur:
if Parameter 'download' im Request:
sende die header und den Content
else
unbekannter Parameter
Sofern es mehrere Links zum Download gibt, nimm den Wert (Parametername=Wert) hinzu und erweitere die Kontrollstruktur entsprechend.
MfG
Hallo,
hab es nun so gemacht
function makeDownload($file, $dir, $type)
{
header("Content-Type: $type");
header("Content-Disposition: attachment; filename=\"$file\"");
readfile($dir.$file);
}
$dir = 'kalender/2015/pdf/';
$type = 'application/pdf';
if(!empty($_GET['file']) && !preg_match('=/=', $_GET['file']))
{
if(file_exists ($dir.$_GET['file']))
{
makeDownload($_GET['file'], $dir, $type);
}
}
Die Datei wird zwar herunter geladen allerdings kann ich die nicht mehr öffnen, es kommt folgender Hinweis:
Hallo,
Die Datei wird zwar herunter geladen allerdings kann ich die nicht mehr öffnen, es kommt folgender Hinweis:
Prüf mal die Länge der Datei vor und nach dem Download. Auf Nummer Sicher gehen: Datei im binmode lesen und im binmode auch senden.
MfG
Korrigiert mich, wenn ich falsch liege, aber wenn ich einen Downloaddialog erzwingen möchte, benutze ich Octet/stream:
download.php:
<?php
$Path = "./01.pdf";
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"".basename($Path)."\"");
readfile($Path);
?>
Weiterhin übergebe ich gerne Pfade per GET an die download.php, etwa download.php?file="datei.pdf" und evaluiere den Parameter. Dabei habe ich die download.php stets im Document Root und der download Pfad befindet sich meistens im nicht öffentlichen Server Root in einem dortigen Unterordner download. Alle Pfade gehen dann relativ von diesem Ort aus. Damit man nicht auf beliebige Ordner und Dateien im Server Root zugreifen kann, filtere ich Doppelpunkte aus dem GET-Parameter file heraus und ersetze sie durch einfache Punkte.
Cheers,
Baba
Liebe Mitdenker,
liebe Wissende,
liebe Neugierige,
ja!
Korrigiert mich, wenn ich falsch liege, aber wenn ich einen Downloaddialog erzwingen möchte, benutze ich Octet/stream:
Warum nicht den richtigen MIME-Type angeben?
Durch die Content-Dispoition acht das eigentlich inzwischen jeder Browser so, wie Melina sich das wünscht.
basename() für den filename ist schon ganz gut. Allerdings ķönnen da immer noch Zeichen im String sein, mit denen der Client nix anfangen kann.
Einen Pfad aus $_GET zu akzeptieren ist eine ganz böse Idee. Allerdings könnte da basename() auch ausreichen.
Anstelle von Request-Parametern kann man auch mit mod_rewrite und path_info arbeiten. Dann sieht die URL auch hübsch aus
GET example.org/files/kalender.pdf
Bei allen Requests auf /files/ einfach das Skript aufrufen. Das guckt dann in path_info und holt sich dort den ersten Teil, falls mehrere enthalten sind.
Das bringt die User dann gar nicht erst auf die Idee, herumzuexperimentieren, um an die passwd oder andere nette Systemdateien zu kommen.
Weiterhin übergebe ich gerne Pfade per GET an die download.php, etwa download.php?file="datei.pdf" und evaluiere den Parameter. Dabei habe ich die download.php stets im Document Root und der download Pfad befindet sich meistens im nicht öffentlichen Server Root in einem dortigen Unterordner download. Alle Pfade gehen dann relativ von diesem Ort aus. Damit man nicht auf beliebige Ordner und Dateien im Server Root zugreifen kann, filtere ich Doppelpunkte aus dem GET-Parameter file heraus und ersetze sie durch einfache Punkte.
siehe oben: mod_rewrite
Spirituelle Grüße
Euer Robert
Einen Pfad aus $_GET zu akzeptieren ist eine ganz böse Idee. Allerdings könnte da basename() auch ausreichen.
Wie gesagt, ich verwende relative Pfade unterhalb eines von mir definierten Ordners, den ich in der download.php definiere. Also nicht übergebe. Nach oben kann man nicht, da ich den Doppelpunkt durch den einfachen Punkt ersetze.
Cheers,
Baba
Liebe Mitdenker,
liebe Wissende,
liebe Neugierige,
ja!
Einen Pfad aus $_GET zu akzeptieren ist eine ganz böse Idee. Allerdings könnte da basename() auch ausreichen.
Wie gesagt, ich verwende relative Pfade unterhalb eines von mir definierten Ordners, den ich in der download.php definiere. Also nicht übergebe. Nach oben kann man nicht, da ich den Doppelpunkt durch den einfachen Punkt ersetze.
Zeig bitte mal, wie Du das machst.
Spirituelle Grüße
Euer Robert
Zeig bitte mal, wie Du das machst.
while (substr_exists($File, "..")) $File = str_replace("..", ".", $File);
Cheers,
Baba
Liebe Mitdenker,
liebe Wissende,
liebe Neugierige,
ja!
Zeig bitte mal, wie Du das machst.
while (substr_exists($File, "..")) $File = str_replace("..", ".", $File);
Gut. Netter Wrapper für "while(false !== strpos($File, '..'))" ...
Spirituelle Grüße
Euer Robert
Liebe Mitdenker,
liebe Wissende,
liebe Neugierige,
ja!
Zeig bitte mal, wie Du das machst.
while (substr_exists($File, "..")) $File = str_replace("..", ".", $File);
Gut. Netter Wrapper für "while(false !== strpos($File, '..'))" ...
Was kommt eigentlich dabei heraus, wenn man
$File = str_replace(array('...','..','..'), ".", $File);
schreibt?
Spirituelle Grüße
Euer Robert
Hallo,
Zeig bitte mal, wie Du das machst.
while (substr_exists($File, "..")) $File = str_replace("..", ".", $File);
Cheers,
Baba
Entschuldige bitte, aber wenn du von Doppelpunkt schreibst, denke ich an ":". Was du meinst ist ein doppelter Punkt. Was machst du übrigens, wenn ich mit vier Punkten ankomme?
Gruß
Kalk
Hallo
Was machst du übrigens, wenn ich mit vier Punkten ankomme?
du verwendest eine while-Schleife, ok, das hab ich übersehen...
Gruß
Kalk
Om nah hoo pez nyeetz, Tabellenkalk!
while (substr_exists($File, "..")) $File = str_replace("..", ".", $File);
Was machst du übrigens, wenn ich mit vier Punkten ankomme?
Naja „while“ heißt …
while (strstr($File, "..")) $File = str_replace("..", ".", $File);
Solange in $File der Teilstring ".." vorkommt ersetze ihn wieder und wieder und wieder durch "."
Aber die Frage war sicher rein rethorisch. ;-)
Matthias
Korrigiert mich, wenn ich falsch liege, aber wenn ich einen Downloaddialog erzwingen möchte, benutze ich Octet/stream:
Ein schmutziger Hack würde darin bestehen, dem Browser einen ihm völlig unbekannten, ggf. zufällig generierten Content-Type-Header zu senden um einen "Speichern unter..." Dialog aus ihm herauszuwürgen. Tablet-Benutzer erfreuen sich gelegentlich dann der Tatsache, dass sie diesen fiesen Dialog gar nicht erst zu sehen bekommen.
Weiterhin übergebe ich gerne Pfade per GET an die download.php, etwa download.php?file="datei.pdf" und evaluiere den Parameter.
Mach eine interne Tabelle als Map von {number => /path/file}, lege als Parameter file=number in die Klick-Links und Du ersparst Dir das Gefummel mit den Pfadangaben und schreibst Dir keine sicherheitsbedenklichen Geschichten. Eine solche Konfiguration ist einfacher zu pflegen als der Programmcode, des Weiteren kann dafür auch ein Basisverzeichnis konfiguriert sein und die Download-Liste kann aus der Konfiguration heraus automatisch erstellt werden.
MfG
Hi,
Korrigiert mich, wenn ich falsch liege, aber wenn ich einen Downloaddialog erzwingen möchte, benutze ich Octet/stream:
Ein schmutziger Hack würde darin bestehen, dem Browser einen ihm völlig unbekannten, ggf. zufällig generierten Content-Type-Header zu senden um einen "Speichern unter..." Dialog aus ihm herauszuwürgen.
warum sollte man das tun? Genau dafür ist doch application/octet-stream gedacht.
Dass es mal Browser gab[*], die man so nicht zur Vernunft bringen konnte, ist eine andere Sache. Die hätten auf einen erfundenen Content-Type aber auch nicht wie gewünscht reagiert. Deswegen kamen ja oft Krücken zur Anwendung, etwa ein einzelnes JPEG-Bild oder ein Video noch zu zippen.
[*] Ja, der IE war bis mindestens Version 6 ein solcher Problembär. Der hat nämlich generell die ersten paar Bytes der empfangenen Nutzdaten untersucht, und sobald er den Typ erkannt hatte (oder erkannt zu haben glaubte), war ihm der vom Server übermittelte Content-Type schnurz. Andere Browser haben Quelltext angezeigt, wenn eine HTML-Ressource als text/plain gesendet wurde; IE hat HTML interpretiert. Andere Browser bekamen einen Würgreflex, wenn ein JPEG-Bild als text/css gesendet wurde; IE hat das Bild trotzdem erkannt.
Ob dieses Verhalten in der Zwischenzeit korrigiert wurde, weiß ich nicht.
Ciao,
Martin
Aloha ;)
[*] Ja, der IE war bis mindestens Version 6 ein solcher Problembär. Der hat nämlich generell die ersten paar Bytes der empfangenen Nutzdaten untersucht, und sobald er den Typ erkannt hatte (oder erkannt zu haben glaubte), war ihm der vom Server übermittelte Content-Type schnurz. Andere Browser haben Quelltext angezeigt, wenn eine HTML-Ressource als text/plain gesendet wurde; IE hat HTML interpretiert. Andere Browser bekamen einen Würgreflex, wenn ein JPEG-Bild als text/css gesendet wurde; IE hat das Bild trotzdem erkannt.
Du hast den IE6 einfach nur falsch verstanden... das waren keine Bugs, sondern Features! :D Wie kommst du als eitler Webentwickler auch darauf, den erhabenen Internet-Erkunder über das Wesen eines Downloads hinwegtäuschen zu wollen. Der erhabene Herr X-Plörre lässt sich doch kein x für ein u, pardon, kein Plaintext für HTML vormachen :D
Heutzutage würde man das als intelligentes Verhalten werten... Smart-Eplorer, läuft insbesondere auf Smart-TV's...
Übrigens, die Smart-TV's, sind das die, auf denen man kein RTL (a.k.a. Assi-TV) zum Laufen bekommt?
Ist ja schon gut, ich troll mich ;)
Grüße,
RIDER
Hallo
Übrigens, die Smart-TV's, sind das die, auf denen man kein RTL (a.k.a. Assi-TV) zum Laufen bekommt?
Wenn du dieses Nichts in HD meinst, nicht ohne weitere Maßnahmen a.k.a CI+- bzw. HD+-Modul und Smartcard. Aber auch dann nur mit Aufnahmeverbot und Timeshift-Begrenzung. Wofür das bei deren „Programminhalten“ auch immer gut sein soll.
Ist ja schon gut, ich troll mich ;)
Ok.
Tschö, Auge
Liebe Mitdenker,
liebe Wissende,
liebe Neugierige,
ja!
warum sollte man das tun? Genau dafür ist doch application/octet-stream gedacht.
Ist es nicht.
Es ist dafür gedacht, auch Ressourcen anbieten zu können, denen keine Applikation zuzuordnen ist, also die keinen definierten MIME-Type haben. Oft verspielt man sich damit die Möglichkeit, im Download-Dialog neben "Speichern unter" gleich eine passende Applikation al Alternative vorzuschlagen.
Was "passend" ist, bestimmt sowieso der Client in seinem Reich ganz alleine
Spirituelle Grüße
Euer Robert
Hi,
Ob dieses Verhalten in der Zwischenzeit korrigiert wurde, weiß ich nicht.
Probiern wirs doch mal aus, mein Content ist ein bischen text und ich sende die header:
$self->header(
"Content-Type" => "llafuz/zufall",
"Content-Disposition" => "Attachment; filename=blast.exe"
);
IE 8: Fragt, ob ich die Datei 'blast.exe' speichern oder ausführen möchte
FF 34.0: Bietet die Datei 'blast.exe' zum Speichern an
MfG ;)
Hallo,
Ob dieses Verhalten in der Zwischenzeit korrigiert wurde, weiß ich nicht.
Probiern wirs doch mal aus, mein Content ist ein bischen text und ich sende die header:
$self->header(
"Content-Type" => "llafuz/zufall",
"Content-Disposition" => "Attachment; filename=blast.exe"
);
>
> IE 8: Fragt, ob ich die Datei 'blast.exe' speichern oder ausführen möchte
der orientiert sich also am vorgeschlagenen Dateinamen, anstatt am (unbekannten) Content-Type. IMO auch nicht ganz sauber. Das ist aber nicht das, was ich beschrieben habe. Nimm mal ein HTML-Dokument als tatsächlichen Content und sende es als text/plain. Was macht der IE? Rendert er HTML oder zeigt er den Roh-Text an?
> FF 34.0: Bietet die Datei 'blast.exe' zum Speichern an
Das ist okay und erwartungskonform.
Ciao,
Martin
--
Okay, Alkohol ist keine Antwort.
Aber manchmal vergisst man beim Trinken wenigstens die Frage.
Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
Hallo,
der orientiert sich also am vorgeschlagenen Dateinamen, anstatt am (unbekannten) Content-Type. IMO auch nicht ganz sauber. Das ist aber nicht das, was ich beschrieben habe. Nimm mal ein HTML-Dokument als tatsächlichen Content und sende es als text/plain. Was macht der IE? Rendert er HTML oder zeigt er den Roh-Text an?
Content-Type: text/plain => Mein IE 8 rendert HTML
derselbe HTML-Content (vollständige Seite) und ohne filename im Header
Content-Type: foo/bar => Download-Dialog
Hier erscheint im Download-Dialog: Unbekannter Dateityp, Dateiname wie URL/Path
Es ist müßig, das Verhalten des IE zu erforschen. Aber bei einem unbekannten Content-Type-Header kotzt er den Download-Dialog aus.
Schöne Grüße.
Ich habe ein Document Root html, wo die download.php liegt:
/html/download.php (erreichbar unter www.example.com/download.php)
Ich habe einen Ordner für Downloads (für jede meiner Domains ein anderes) , welches oberhalb des Document Root liegt.
/files/<domain>/_data/files (die Domain wird von der download.php ermittelt.
Mach eine interne Tabelle als Map von {number => /path/file}, lege als Parameter file=number in die Klick-Links und Du ersparst Dir das Gefummel mit den Pfadangaben und schreibst Dir keine sicherheitsbedenklichen Geschichten.
1. Was meinst Du für ein Gefummel?
Ich finde es sehr komfortabel, wenn ich per www.example.com/download?file=/infomaterial/Manual.pdf
die Datei /file/www.example.com/_data/files/infomaterial/Manual.pdf ausliefern kann.
2. Was genau ist daran sicherheitsbedenklich?
Über die download.php gelangt man NUR in diesen einen Ordner. Oder übersehe ich etwas?
Eine solche Konfiguration ist einfacher zu pflegen als der Programmcode, des Weiteren kann dafür auch ein Basisverzeichnis konfiguriert sein und die Download-Liste kann aus der Konfiguration heraus automatisch erstellt werden.
3. Was soll daran leichter zu pflegen sein?
Die Map aktuell halten, jedes einzelne Dateichen dort einzutragen finde ich ziemlich aufwändig. Außerdem finde ich es nicht schön, wenn aus den Dateien nur Nummern werden. So sagt einem der Link überhaupt nichts über den zu erwartenden Inhalt!
Bin gespannt.
Cheers,
Baba
Liebe Mitdenker,
liebe Wissende,
liebe Neugierige,
ja!
Was meinst Du für ein Gefummel?
Ich finde es sehr komfortabel, wenn ich per www.example.com/download?file=/infomaterial/Manual.pdf
die Datei /file/www.example.com/_data/files/infomaterial/Manual.pdf ausliefern kann.Was genau ist daran sicherheitsbedenklich?
Über die download.php gelangt man NUR in diesen einen Ordner. Oder übersehe ich etwas?
und die darunterliegenden, so wie Du das beschrieben hast.
Alle Dateien, die unter dem gesetzten Wurzelpunkt liegen, sind im Quelltext auslesbar, also auch alle php-Scripte :-O
Wolltest Du das?
Ich habe nicht nachgefragt, wie Du das machst, weil ich lange Weile habe, sondern weil ich schon eine Menge "desparate home progger" am Rohr gehabt habe, die sich überhaupt nicht vorstellen konnten (oder nicht wollten?), wo den die Lücke ist. Natürlich ist dann PHP schuld ;-P
Spirituelle Grüße
Euer Robert
Aloha ;)
Über die download.php gelangt man NUR in diesen einen Ordner. Oder übersehe ich etwas?
und die darunterliegenden, so wie Du das beschrieben hast.
Alle Dateien, die unter dem gesetzten Wurzelpunkt liegen, sind im Quelltext auslesbar, also auch alle php-Scripte :-O
Wolltest Du das?
Natürlich wollte er das. Lies genauer. Oder was hätten deiner Meinung nach PHP-Skripte außerhalb des document-root zu suchen, wo sich der fragliche Ordner und dessen Unterordner befinden? :P Außerdem ist es ziemlich selbstverständlich, dass in einem extra für download-Dateien angelegten Ordner und dessen Unterordnern nur für Download geeignete Dateien liegen. Zumindest für mich :P
Von daher: Nein, aus meiner Sicht keinerlei Sicherheitslücken und auch ansonsten imho ganz elegant.
Auch brauchbar, wenn man keinen Zugriff außerhalb des document-root hat... man muss sich nur klarmachen, dass in einem download-ordner und dessen unterordnern nur Dateien liegen dürfen, die auch runtergeladen werden sollen...
Ich habe nicht nachgefragt, wie Du das machst, weil ich lange Weile habe,
Ne, sondern weil du den Gedanken nicht zu Ende gedacht hast :P
Grüße,
RIDER
P.S.: Bitte nicht als Angriff verstehen!
Liebe Mitdenker,
liebe Wissende,
liebe Neugierige,
ja!
Die Datei wird zwar herunter geladen allerdings kann ich die nicht mehr öffnen, es kommt folgender Hinweis:
Deine Skriptdatei gibt vermutlich zusätzliche Zeichen aus. Eine BOM oder trailing Spaces sind da sehr beliebt ;-O
Spirituelle Grüße
Euer Robert
Om nah hoo pez nyeetz, Melina!
ich möchte auf meiner Seite ein PDF einbinden. Wenn ich auf einen Link klicke soll die PDF herunter geladen werden und _nicht_ im Browser geöffnet. Wie kann ich dieses verhalten erzwingen?
Gar nicht. Und das ist auch gut so. Schließlich ist der Browserbesitzer der Bestimmer.
Matthias
Hallo Matthias,
Gar nicht. Und das ist auch gut so. Schließlich ist der Browserbesitzer der Bestimmer.
rede doch bitte kein Mist! Sorry wenn ich das so deutlich sage. Ich sehe jeden Tag Seiten wo ich eine PDF herunterladen kann.
Wenn ich das nicht machen soll, ist die eine Sachen, aber zu sagen es geht nicht, ist die andere Sache, was meiner Meinung nach nicht OK ist!
Om nah hoo pez nyeetz, Melina!
rede doch bitte kein Mist! Sorry wenn ich das so deutlich sage. Ich sehe jeden Tag Seiten wo ich eine PDF herunterladen kann.
Selbstverständlich gibt es solche Seiten. Ich kann aber in den Einstellungen meines Browsers bestimmen, wie dieser mit Ressourcen umgehen soll, die mit dem header "application/pdf" daherkommen. Möglicherweise habe ich mich allerdings tatsächlich zu weit aus dem Fenster gelehnt und der Browser reagiert auf "Content-Disposition" => qq(Attachment; filename="asdf.pdf") trotz meiner Vorgabe wirklich mit einem "Speichern unter"-Dialog. Wenn du eine Testseite online stellst, kann ich es ja mal testen.
Damit wollte ich weder dich persönlich angreifen noch deinen Wunsch als absurd abtun, sondern nur zum Ausdruck bringen, dass du u.U. wenig Einfluss darauf hast, was in den Browsern deiner Besucher tatsächlich passiert. Gerade in Punkto Sicherheit (und ein PDF-Dokument kann durchaus ein Sicherheitsrisiko darstellen) sollten die Wünsche des Users vor denen des Seitenerstellers stehen. Wenn der User das Dokument tatsächlich speichern möchte, kann er das auch tun, wenn er es vorher gesehen hat.(*) Heruntergeladen hat er es in beiden Fällen. Wenn er es vorher nicht sieht, war das Herunterladen möglicherweise umsonst.
(*) Falls es einen Virus enthält, ist möglicherweise das Browserplugin up-to-dater als irgendein Acrobatreader 9.
Matthias
Om nah hoo pez nyeetz, Melina!
rede doch bitte kein Mist! Sorry wenn ich das so deutlich sage. Ich sehe jeden Tag Seiten wo ich eine PDF herunterladen kann.
Selbstverständlich gibt es solche Seiten. Ich kann aber in den Einstellungen meines Browsers bestimmen, wie dieser mit Ressourcen umgehen soll, die mit dem header "application/pdf" daherkommen.
Das ist toll, dass Du das kannst. Was bestimmst Du denn in den Einstellungen deines Browsers, wenn eine Seite mit dem Header "Content-Type: apliction/qwartz" daherkommt? Das würde mich mal interessieren, weilich mich beim Wort appleiccaution fast regelmäßig vertippe.
noch deinen Wunsch als absurd abtun, sondern nur zum Ausdruck bringen, dass du u.U. wenig Einfluss darauf hast, was in den Browsern deiner Besucher tatsächlich passiert. Gerade in Punkto Sicherheit (und ein PDF-Dokument kann durchaus ein Sicherheitsrisiko darstellen)
Nana, der Header kann ja auch was anderes angeben, s.o. Ein Böserwichtl, der annern ihre Rechner so richtig verschweinzen will, schert sich eine Bockwurst um RFC-gerechte Header.
Schöne Grüße ;)
Hi,
Gar nicht. Und das ist auch gut so. Schließlich ist der Browserbesitzer der Bestimmer.
rede doch bitte kein Mist! Sorry wenn ich das so deutlich sage. Ich sehe jeden Tag Seiten wo ich eine PDF herunterladen kann.
Das hätte dich ja auf die Idee bringen können, dass du vielleicht nicht die erste Person auf der Welt bist, die sowas vorhat … und dann hättest du zu diesem schon oft diskutierten Thema ja vielleicht auch erst mal suchen können.
MfG ChrisB
Wenn ich auf einen Link klicke soll die PDF herunter geladen werden und _nicht_ im Browser geöffnet. Wie kann ich dieses verhalten erzwingen?
Gar nicht. Und das ist auch gut so. Schließlich ist der Browserbesitzer der Bestimmer.
Ich möchte gerne bei *.mp3 Dateien wählen können, wie ich sie abspiele oder ob ich sie speichere. Meine Opera öffnet bei Klick ohne Rückfrage einen Spieler im Hintergrund (mplayer), den ich unter Ubuntu nicht "sehen", also auch nicht schließen kann.
Dumm gelaufen, wenn ich minutenlang warten muss, bis der womöglich unerwünschte Lärm zuende ist. Erst dann kann ich weitermachen mit der nächsten Sound-Datei.
Ja, als kenntnisreicher Browserbesitzer kann "ich" an der entsprechenden Schraube drehen. Aber ich habe auch kenntnisarme bis kenntnislose Hörer.
Linuchs
Hi!
ich möchte auf meiner Seite ein PDF einbinden. Wenn ich auf einen Link klicke soll die PDF herunter geladen werden und _nicht_ im Browser geöffnet. Wie kann ich dieses verhalten erzwingen?
In HTML 5 gibt es das download Attribut:
<a href="mein.pdf" download>
Wird aber aktuell nur von Chrome/Opera und Firefox unterstützt
http://caniuse.com/#feat=download
Jacob
Hallo,
In HTML 5 gibt es das download Attribut:
Vielen Dank, funktioniert wunderbar! Genau das habe ich gesucht.
Wird aber aktuell nur von Chrome/Opera und Firefox unterstützt
http://caniuse.com/#feat=download
Och das ist nicht so schlimm. Sollte jemand mit einem IE oder einem anderen Browser kommen hat eben Pech und muss sich die Datei so herunterladen.
Hallo
Wird aber aktuell nur von Chrome/Opera und Firefox unterstützt
http://caniuse.com/#feat=downloadOch das ist nicht so schlimm. Sollte jemand mit einem IE oder einem anderen Browser kommen hat eben Pech und muss sich die Datei so herunterladen.
Um auch diesem Problem mal die Luft abzulassen, sei gesagt, dass jeder Browser fernab des Erzwingens des Downloaddialogs irgendwas anbietet. Sei es die Anzeige über das festgelegte Browserplugin, welches dem Benutzer u.A. anbietet, das PDF zu speichern (und wenn es als Kopie ist) oder die heruntergeladene Datei mit dem Standardprogramm zu öffnen (und sie von dort abzuspeichern oder sie über den Downloaddialog des Browsers abzuspeichern.
Irgendwas, was das Speichern der Datei – eventuell über einen Umweg – ermöglicht, geschieht immer. ich selbst benutze, wenn mir die URL des Downloads nicht verschleiert wird, übrigens fast immer den Punkt „Ziel speichern unter“ im über die rechte Maustaste erreichbaren Kontextmenü. Es gibt also noch weitere Wege. :-)
Tschö, Auge