jpeg-download
-
Hat jemand ne Idee, wie ich (ohne das Bild zu packen) einen Link erzeugen kann der das Bild nicht öffnet sondern den "Download"-Dialog öffnet um das Bild herunter zu laden...?
-
du legst es in ein Verzeichnis, dort hinterlegst du auch eine .htaccess Datei, die den Mime Typ von *.jpg überschreibt.
Dann sollte es in allen vernünftigen Browsern funktionieren (mit IE bin ich mir nicht sicher, kann gut sein, dass er es trotzdem anzeigt, weil er nur nach der Endung der Datei entscheidet).
-
ok könntest du mir auch verraten wie ich den mime-type überschreibe, da hab ich noch nie was mit angefangen
-
AddType application/octet-stream jpg
habs jetzt nicht ausprobiert, aber sieht gut aus.
-
Internal Server Error The server encountered an internal error or misconfiguration and was unable to complete your request.
so richtig scheints nich zu gehen ^^
-
auf deinem selbst installieren System oder einem Internetserver? Auf den Internetservern darf man nämlich nicht immer alles per .htaccess überschreiben. Da musst du dann mal den Support vom Provider fragen.
Habs mal auf dem Webserver hier auf meinem Computer ausprobiert und da geht das. Muss also am I-Net Server liegen.
-
Also ich habs auch lokal getestet. Da scheints zu funktionieren.
Hab auch gestern gleich mal, nett wie ich bin, bei meinem Provider nachgefragt ob die da nich was dran machen können
ne andere methode wirds net geben oder?
aber danke erstmal!
-
Wenn du php o.ae. hast, koenntest du ein Script bemuehen, um die http-header zu beeinflussen.
Klappt aber AFAIK auch nicht immer beim IE.
-
Nobuo T schrieb:
Klappt aber AFAIK auch nicht immer beim IE.
ja deswegen hat ich ja gefragt ich hat was fertig was den header beeinflusst hat aber das war eher so "zufallsprinzip" in bezug auf die funktionstüchtigkeit
-
Nubuo T: Du willst also eine PHP Datei bild.jpg haben? Normal natürlich möglich, aber wenn er nichtmal den Type von *.jpg überschreiben darf, darf er so eine Datei auch nicht zum PHP Script machen.
-
Ich hatte das eher so verstanden, dass ein normales PHP-Script aufgerufen wird, welches dann das JPEG weiterreicht
-
kann man im HTTP Header angeben unter welcher Datei es gespeichert werden soll?
Ansonsten könnte er nämlich einfach der Datei eine andere Endung geben und schon kann sein Server den Mime Typ nicht mehr richtig zuordnen und lässt den Benutzer die Datei herunterladen... der muss sie dann nur umbenennen.
-
Ja, geht, ist dann natürlich auch ne gute Möglichkeit:
http://ffm.junetz.de/members/reeg/DSP/node15.html schrieb:
4 Download
In bestimmten Fällen wäre es schön, wenn ein PHP-Script die von ihm erzeugten Daten nicht einfach in Form einer HTML-Seite ausgeben, sondern diese an den Client senden könnte. Dieser sollte dann die Daten z.B. in Form einer Datei abspeichern oder auf sonstige Weise verarbeiten (an spezielle Applikationen übergeben).Solche Situationen gibt es z.B. bei Anhängen (Attachments) in einem Webmail-System. Normalerweise wird die Ausgabe eines PHP-Scripts als HTML interpretiert, welches der Browser anzeigen soll. Damit der Browser die Datei aber direkt auf die Platte speichert (bzw. dem Benutzer überläßt, was er damit machen will), muß die Angabe über den Typ des Dateiinhalts für die Übertragung geändert werden. Das geschieht mit folgender Anweisung (siehe auch weiter unten):
header("Content-Type: application/octetstream");
Wenn nichts anderes angegeben wird, benutzt der Browser den Dateinamen des Scripts aus der URL als Dateinamen zum Abspeichern.
header("Content-Disposition: attachment; filename=datei_name.ext");
Mit diesem Header wird der Dateiname auf datei_name.ext gesetzt. Man beachte das Fehlen von Quoting-Zeichen wie etwa Hochkommata[*]. Grund hierfür ist, daß bestimmte Browser wie der IE sonst die Quoting-Zeichen als Teil des Dateinamens ansehen. Natürlich kann anstelle des hier beispielhaft eingetragenen jeder mögliche Dateiname stehen. Eventuelle Pfadangaben sollen explizit ignoriert werden. D.h. es ist möglich den Dateinamen festzulegen, aber nicht in welches Verzeichnis die Datei gespeichert werden sollte.
Microsoft liest die RFCs scheinbar anders als alle anderen (oder gar nicht?), so daß der IE 5.5[*]nur folgenden Header versteht:
header("Content-Disposition: filename=datei_name.ext");
Über die Variable HTTP_USER_AGENT können wir PHP auch entscheiden lassen, welche Variante wahrscheinlich die richtige ist.
header("Content-Disposition: ".
(strpos($HTTP_USER_AGENT,"MSIE 5.5")?""
:"attachment; ").
"filename=datei_name.ext");Die Variante, den Dateinamen über Header festzulegen, hat einen kleinen Nachteil: Wenn der Nutzer später im Browser nicht auf den Link klickt, um dann die Datei zu speichern, sondern direkt über Save Link as speichern will, konnte noch kein Header gesendet werden, so daß der Browser den Dateinamen nicht kennt und wieder den Dateinamen des Scripts vorschlägt. Das kann nur umgangen werden, indem man dafür sorgt, daß der gewünschte Dateiname in der URL steht. Dies ist wiederum nur über Funktionen des Webservers möglich. Beim Apache sind das die Funktionen Rewrite und Redirect.
Die Erfahrung hat gezeigt, daß ein Content-Transfer-Encoding Header die ganze Sache sicherer macht, auch wenn er laut RFC 2616 nicht benutzt wird.
header("Content-Transfer-Encoding: binary");
Die großen Browser zeigen beim Download häufig einen Fortschrittsbalken an. Dies funktioniert allerdings nur dann, wenn der Browser weiß, wie groß die Datei ist. Die Größe der Datei in Bytes wird über den Content-Length Header angegeben.
header("Content-Length: {Dateigröße}");
Zusammenfassend können wir nun folgenden Header benutzen, wenn die Ausgabe eines Scripts heruntergeladen werden soll:
// Dateityp, der immer abgespeichert wird
header("Content-Type: application/octetstream");
// Dateiname
// mit Sonderbehandlung des IE 5.5
header("Content-Disposition: ".
(!strpos($HTTP_USER_AGENT,"MSIE 5.5")?"attachment; ":"").
"filename=datei name.ext");
// eigentlich ueberfluessig, hat sich aber wohl bewaehrt
header("Content-Transfer-Encoding: binary");
// Zwischenspeichern auf Proxies verhindern
// (siehe weiter unten)
header("Cache-Control: post-check=0, pre-check=0");
// Dateigröße für Downloadzeit-Berechnung
header("Content-Length: {Dateigroesse}");Diese Headerkombination sollte zuverlässig funktionieren. Bei der Vielzahl von Browsern, die sich nicht immer an die RFCs halten, ist jedoch nicht ausgeschlossen, daß das Ganze angepasst werden muß. Sollte jemand eine Kombination haben, die besser funktioniert, freue ich mich natürlich über eine Rückmeldung.
Ein letztes Wort noch zur Header-Kombination: Wie sich zeigte, funktioniert diese Download-Methode nicht mehr, wenn vor dem Senden o.g. Header schon bestimmte andere Header, wie die für das Nicht-Cachen (10.1.6), gesandt wurden. Man sollte also immer auf die Reihenfolge der Header achten und sicherstellen, daß vor den Headern für den Download keine oder nur definitiv nicht störende Header verschickt werden.
-
vielen vielen dank!
das ist ja perfekt.