bild downloaden statt anzeigen
Sie verwenden einen veralteten Browser (%browser%) mit Sicherheitsschwachstellen und können nicht alle Funktionen dieser Webseite nutzen.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Es gibt 28 Antworten in diesem Thema. Der letzte Beitrag () ist von Mad Andy.
-
-
-
-
-
oder so:
Rechtsklick auf den Link --> Ziel speichern unter
wie ich es hier z.b mache...Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Scream“ ()
-
-
-
Marcus Gräfe schrieb:
Mit PHP geht das.
Und wie? -
Du musst die Datei als Nicht-Bild anbieten. Üblicherweise als application/octet-stream. Das Problem ist, dass der Webserver automatisch den Dateitypen erkennt, anhand der Dateiendung, und das dann automatisch rausschickt.
Im einfachsten Fall machst du eine PHP-Datei, z.B. getimage.php, in die schreibst du dann z.B.:
PHP-Quellcode
- <?php
- // statisch:
- //$file = 'myFile.png';
- // oder via GET:
- $file = $_GET['file'];
- if (file_exists($file)) {
- header('Content-Description: File Transfer');
- header('Content-Type: application/octet-stream');
- header('Content-Disposition: attachment; filename='.basename($file));
- header('Content-Transfer-Encoding: binary');
- header('Expires: 0');
- header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
- header('Pragma: public');
- header('Content-Length: ' . filesize($file));
- ob_clean();
- flush();
- readfile($file);
- exit;
- }
- ?>
Wenn du nun getimage.php?file=abc.png eingibst, dann wird die datei abc.png zum Download angeboten (Pfad ist relativ zum Script): als binärer Attachment File Transfer mit dem Mime-Type application/octet-stream.
Tatsächlich werden zuerst einfach alle Header rausgeschickt. Flush ist wichtig, damit die Filesize sofort ankommt, also bevor die Daten geschickt werden. Und im Anschluss wird einfach mit readfile die gesamte Datei ausgegeben.
ACHTUNG!: du musst die erlaubten Dateien *unbedingt* einschränken, weil sonst _jede_ Datei runtergeladen werden kann. u.A. auch PHP-Dateien, wo Passwörter drin stehen!! -
-
Wenn's für die Bilder/Dateien nen eigenen Ordner gibt, kannst du das auf den Ordner beschränken, aber ACHTUNG: ".." (also Verzeichnis aufwärts) klappt trotzdem, müsstest also den Ordner vorher "auflösen". (Siehe dirname und besonders realpath).
Ein halbwegs sicherer und einfacher Weg ist es die Dateiendungen einzugrenzen - Bilder können ja ansonsten auch vollständig geladen werden, somit is da kein Risiko dabei.
PHP-Quellcode
- <?php
- $ext = substr($file, -3);
- if (file_exists($file) && ($ext === '.jpg' || $ext === '.png' || $ext === '.gif' || $ext === '.bmp' || $ext === '.tga' || $ext === '.tif')) {
- header('Content-Description: File Transfer');
- header('Content-Type: application/octet-stream');
- header('Content-Disposition: attachment; filename='.basename($file));
- header('Content-Transfer-Encoding: binary');
- header('Expires: 0');
- header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
- header('Pragma: public');
- header('Content-Length: ' . filesize($file));
- ob_clean();
- flush();
- readfile($file);
- exit;
- }
- // hier kannst du übrigens auch noch ne Fehlermeldung ausgeben, dank dem exit am Ende des if
- echo 'Ungültige Datei!';
- ?>
Ich habe leider wenig bis keine php kenntnisse. -
-
-
-
was kommt denn für nen Fehler?Von meinem iPhone gesendet
-
Versuchs mal hiermit:
PHP-Quellcode
- <?php
- //Erst mal den Dateinamen holen
- $file = $_GET['file'];
- //Extension rausfinden
- $path_info = pathinfo($file);
- $ext = $path_info['extension'];
- //Gültige Datei?
- if (file_exists($file) && ($ext == 'jpg' || $ext == 'png' || $ext == 'gif' || $ext == 'bmp' || $ext == 'tga' || $ext == 'tif')) {
- header('Content-Description: File Transfer');
- header('Content-Type: application/octet-stream');
- header('Content-Disposition: attachment; filename='.basename($file));
- header('Content-Transfer-Encoding: binary');
- header('Expires: 0');
- header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
- header('Pragma: public');
- header('Content-Length: ' . filesize($file));
- ob_clean();
- flush();
- readfile($file);
- exit;
- }
- // hier kannst du übrigens auch noch ne Fehlermeldung ausgeben, dank dem exit am Ende des if
- echo 'Ungültige Datei!';
- ?>
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „nicgenie“ ()
-
nicgenie schrieb:
Mal so'ne ganz dumme Frage: Hast du überhaupt einen Webserver wie XAMPP installiert?Fräulein schrieb:
Leider das selbe problem, kommt immer der echo text.
-
-
nicgenie schrieb:
Versuchs mal hiermit:
Egal ob es ein bild ist oder anderstrum.
grußlein -
-
Ähnliche Themen
-
HTML und CSS text vor einem bild anzeigen
nitram0598 - - Off-Topic -
pc-freack - - Sonstige Problemstellungen
-
Strikeall - - Sonstige Problemstellungen
-
4 Benutzer haben hier geschrieben
- Gast (21)
- nicgenie (6)
- nikeee13 (1)
- Marcus Gräfe (1)