Bilder Download erzwingen

Guten tag,

also ich versuche schon seit stunden ein bilder download “script” zusammen zu schnippseln, nur vergeblich. Ich hab auch schon mehrfach gegoogelt aber bin jedoch nie zu einer vernünftigen lösung gekommen.Also die idee ist folgendes…

bei Test wird ja immer auf das bild verlinkt…
nur ich will dass bei so einer verlinkung nicht auf das bild verlinkt wird, sondern, dass ein Download dieser datei gestartet wird. Gibt es nicht sowas wie onclick=“javascript:savefile();”.
Die datei befindet sich nicht auf meinem Server also geht das auch nicht über den trick mit .htaccess(-> bild nicht anschaubar, sondern nur downloadbar machen).

Ich will einfach ein code haben, womit ein angegebenes bild herunterladen kann :slight_smile:
undzwar folgende endunge: jpg/jpeg/png/gif/bmp.

ist das machbar? mit javascript oder php villeicht?

vielen lieben dank im voraus!

[quote=“gunitmedia”]
Ich will einfach ein code haben, womit ein angegebenes bild herunterladen kann :slight_smile:
undzwar folgende endunge: jpg/jpeg/png/gif/bmp.[/quote]

Hatte auch sowas einmal gesucht irgend wie hatte ich das dann hinbekommen…
Versuchs mal mit:
php-faq.de/q-datei-download.html

Du musst dem Browser vorgaukeln das die Datei kein Bild ist sondern vielleicht auch was anderes. Darum Spielt header("Content-Type: application/octet-stream");
Eine wichtige rolle.

Evtl. gibt es auch ne Lösung mit htaccess:
[size=85]http://www.askapache.com/htaccess/htaccess-for-webmasters.html#force-download-octet-stream[/size]
Die Dateien in nen Ordner Packen und ne htaccess-Datei drauf klatschen mit:

# .htaccess File
AddType application/octet-stream .jpg
AddType application/octet-stream .jpeg
AddType application/octet-stream .png
AddType application/octet-stream .gif
AddType application/octet-stream .bmp

also mit javascript klappt es nicht oder ?..

zu deinem vorschlag fishi:

also eine einfache form für meinen fall würde dann so aussehen oder?

// $download sei der Bezeichner für die zu ladende Datei
// etwa: 
$download = $_GET['download'];
 
// Übersetzung von Download-Bezeichner in Dateinamen.
$file = "http://www.meineseite.de/bild.jpg";
 
// Einbruchsversuch abfangen.
if (!isset($file[$download]))
  die("Datei $download nicht vorhanden.");
 
// Vertrauenswürdigen Dateinamen basteln.
$filename = sprintf("%s/%s", $basedir, $filelist[$download]);
 
// Passenden Datentyp erzeugen.
header("Content-Type: image/jpg");
 
// Passenden Dateinamen im Download-Requester vorgeben,
// z. B. den Original-Dateinamen
$save_as_name = basename($file[$download]);
header("Content-Disposition: attachment; filename=\"$save_as_name\"");
 
// Datei ausgeben.
readfile($filename);

und welche variable währe dann mein bild? etwa $file?

edit: .htaccess will ich vermeiden :slight_smile:

[quote=“gunitmedia”]also mit javascript klappt es nicht oder ?..
[/quote]
Dazu kann ich dir nicht genaues sagen. :wink:

[quote=“gunitmedia”]

// Übersetzung von Download-Bezeichner in Dateinamen.
$file = "http://www.meineseite.de/bild.jpg";

und welche variable währe dann mein bild? etwa $file?

edit: .htaccess will ich vermeiden :slight_smile:[/quote]

Mach dies per Array:

[code]$filelist = array(
“file1” => “http://www.meineseite.de/bild.jpg
);

[/code]

download.php?download=file1
File1 = meineseite.de/bild.jpg

ob dies nun auch per “URL” geht kann ich dir leider nicht sagen. (Test es vielleicht wenn du möchtest :wink: )

Im Manual findest du im Eintrag selbst, als auch in den Notes, mehrere Möglichkeiten einen Download zu erzwingen.

Meine Empfehlung: Einfach beim Verweis dazuschreiben, daß man
bei gängigen browsern bei Betätigen des Verweises mit der
rechten Maustaste eine Menü bekommt, wo es auch einen
Eintrag dafür gibt, daß man das Verweisziel abspeichern kann ;o)

Zudem, selbst wenn das Bild dargestellt wird, kann der Nutzer
immer noch solch eine Funktionalität nutzen, um es
abzuspeichern.
Da irgendwas zu erzwingen, ist überflüssig.

In der Tat geht das aber wohl am einfachsten, indem man die
betreffenden Bild in ein eigenes Verzeichnis legt und dort per
.htaccess für die jeweiligen Endungen oder für alles den
Dateityp auf sowas wie application/octet-stream oder
application/x-download setzt (letzteres ist ein erfundenes Format,
was man am ‘x-’ erkennt, der browser sollte dann einen Dialog
anbieten, was man mit der Datei machen will).

Per .htaccess ist besser als per PHP, weil man bei PHP die
Datei jedesmal durch das Skript schleifen muß, was nur den
server belastet. Das ist allenfalls sinnvoll, wenn man auch noch
was zählen will oder andere dynamische Aktionen auslösen will.

kann mir einer villeicht bitte eine testdatei erstellen, das wäre einfacher für mich zu verstehen

Die entsprechenden Dateien packst du in ein Unterverzeichnis,
z.B. mit dem Namen ‘runterladen’.
Sagen wir mal, du hast da Dateien mit den Endungen .jpg,
.png, .gif und .svg, dann legst du in dem Verzeichnis eine Datei
namens .htaccess ab mit folgendem Inhalt:

AddType application/octet-stream .jpg .png .gif .svg

at2.php.net/manual/de/function.header.php

Beispiel #1