2009-08-04 10 views
3

Wie lädst du tatsächlich ein Bild herunter, wenn du darauf klickst? Gibt es irgendeine Art von JavaScript-Code, um genau das zu tun? Hier ist, wie ich das Bild mit reinem HTML zeige.Ein Bild herunterladen OnClick

<a href="#"><img src="myPic.png" border="0"></a> 

Antwort

-2

Möchten Sie das Bild in einem neuen Fenster/Tab öffnen? Oder möchten Sie es auf den Computer des Benutzers herunterladen? Wenn Sie der Benutzer das Bild zu speichern, müssen Sie den Inhaltstyp der Datei setzen sie erhalten:

<?php 
$file = $_GET['file']; 

header("Content-Type: application/octet-stream; "); 
header("Content-Transfer-Encoding: binary"); 
header('Content-Disposition: attachment; filename="'.basename($file).'"'); 
readfile($file); 
?> 

Denken Sie daran, um die Eingabe zu überprüfen, damit die Leute nicht Quelldateien herunterladen.

+2

Nein, Sie don‘ t. Verwenden Sie genaue Inhaltstypen und Inhaltsdispositionsheader. Wenn Sie Beispiele mit klaffenden Sicherheitslöchern in ihnen schreiben, sollten Sie diese Sicherheitslücken noch deutlicher hervorheben. – Quentin

+0

ja, aber wie zum Teufel mache ich, wenn das Bild von einem PHP-Skript erstellt wird? so: sig.php? user = test & anime = hellsing & color2 = farbe_standard –

2

Mit "Download" meinen Sie "Ursache der Browser des Benutzers, um den" Speichern oder Öffnen "-Dialog zu werfen - Sie können nicht.

Sie könnten mit einer anderen URL verknüpfen, die die gleiche Datei aber mit the Content-Disposition header set to attachment anbietet. Die Besonderheiten, wie Sie eine solche Ressource unter dieser URL bereitstellen würden, hängen von den serverseitigen Funktionen ab, die Ihnen angeboten werden.

2

Die meisten Menschen einen Rechtsklick auf das Bild und wählen „Bild speichern unter ...“

Die alternative zu verbinden ist ein serverseitiges Skript zu verwenden, die eine „Content-Type“ setzt und „Content- Disposition "Kopfzeile. In PHP, das wäre so etwas wie dieses Beispiel aus the docs:

header('Content-Type: image/png'); // or 'image/jpg' or 'image/gif' 
header('Content-Disposition: attachment; filename="filename.png"'); 
readfile('original.png'); 

UPDATE: Da sagen Sie das Bild durch einen PHP-Skript in erster Linie erzeugt wird, gibt es ein paar Optionen:

  • Setzen Sie die URL (sig.php? ...) als Parameter auf readfile. Dies bedeutet doppelte Verarbeitung für jeden, der auf den Download klickt.
  • Speichern Sie die Ausgabe von Ihrem Bilderstellungsskript im Dateisystem, und übergeben Sie diese Datei dann an readfile.
  • Bearbeiten Sie das Bilderstellungsskript, um einen zusätzlichen Parameter wie mode=download zu akzeptieren, und geben Sie dann, wenn Sie das Bild ausgeben möchten, diese zwei Header an, wenn der Parameter vorhanden ist.
+0

ja, aber wie zum Teufel mache ich, wenn das Bild von einem PHP-Skript erstellt wird? wie folgt: sig.php? user = test & anime = hellsing & color2 = farbe_standard –

+0

Du ersetzst die Readfile-Zeile mit deinem vorhandenen Code zum Generieren des Bildes ... – Quentin

+0

Ich habe die Antwort mit Vorschlägen für deine zusätzliche Frage aktualisiert. – DisgruntledGoat

1

Ich trick 'das ein bisschen aus - ich zip das Bild und lege es irgendwo hin. Statt eines ausgefallenen Skripts oder serverseitigen Materials verwende ich den Link zum Bild als Speicherort für die ZIP-Datei. Der Benutzer gets gewarnt/gefragt, ob sie diese Zip herunterladen möchten, und voila ...

Aber das ist in der Regel in einem Bereich, wo der Benutzer ist jemand, der das Bild wollen würde ...

+1

Ich persönlich würde nicht gerne eine .zip-Datei herunterladen, wenn ich auf ein Bild klicke - es würde bösartig erscheinen – Luca