• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

neuen Header übergeben

Airwolf89

New member
hi Leute,

habe mal wieder nen Problem.

Geht um folgendes, will ne Downloadfunktion bei mir einbauen.
Läuft alles über nen Ajax Request, wo ich den Pfad zur, auf dem Server, gespeicherten Datei (eine Grafik) übergebe. Funktioniert ja auch, mein Link wird mit dem Ziel gefüttert. Allerdings will ich nicht dass die Grafik angezeigt wird sondern dass nen Downloaddialog erscheint mit dem der User dann seine Grafik auf seinem System lokal speichern kann. Dazu muss ich ja nen neuen Header übergeben. Habe das jetzt schon seit ner ganzen Weile probiert, allerdings kriege ich das nicht hin. Da wird dann immer kein Response gesendet. Was muss ich da in meine php datei einfügen damit das so funktioniert.

Hier mein Beispiel (habe ich von php.net)

PHP:
header('Content-type: application/zip');
header('Content-Disposition: attachment; filename='.$filename);

readfile($filename);
 
//Response für index.htm
echo $filename;

Danke im voraus.
 
Sorry, hab mich falsch ausgedrückt, der ajax request bringt nur nen paar daten zum server, die werden verarbeitet, nen bild wird generiert und auf dem server gespeichert und der pfad zu eben jener datei als response zurückgegeben, diesen response speichere ich dann dynamisch in dás href attribute vom link.
 
und dieses Script wird ganz normal über einen Link aufgerufen? Was kommt denn zurück? Fehlermeldung/Quellcode? Irgendwelche Ausgaben bevor du den header setzt?
 
Ne, also das php script wird über einen Ajax-Resquest angesteuert (nach druck auf einen button um genau zu sein), zurück kommt gar nix, also es kommt kein response (ja, ich habe eine ausgabe mit dem pfad zur datei in dem php script, welche mir diesen pfad auch (ohne veränderung des header) zurückgibt)

Also quasi, wenn ich nicht versuche den header zu ändern dann kommt der pfad im response zurück, der link wird ordentlich gefüllt und fertig. Wenn ich versuche den Header zu ändern dann kommt halt gar kein response zurück und wenn ich dann auf den Link klicke kriege ich ein fenster wo drin steht dass der angegebene Pfad nicht gefunden wurde, wie auch, es wird ja erst gar kein Pfad angegeben.

Hoffe das war verständlich.
 
lol ^^
Du änderst den Header so das er mit einem Bild antwortet und wunderst dich, das AJAX das nicht versteht?
Naja .. 100 mal einfacher ist es doch einfach die Infos die das Schript zum erstellen der datei brauch per GET an das PHP Script zu schicken, das bastelt die Datei (genau so wie du das geschrieben hast) und returnt direkt an den Browser das Bild ..
 
lol ^^
Du änderst den Header so das er mit einem Bild antwortet und wunderst dich, das AJAX das nicht versteht?
Naja .. 100 mal einfacher ist es doch einfach die Infos die das Schript zum erstellen der datei brauch per GET an das PHP Script zu schicken, das bastelt die Datei (genau so wie du das geschrieben hast) und returnt direkt an den Browser das Bild ..


Darum gehts doch gar nicht. Das Bild wird generiert, auf dem server gespeichert, der pfad zurückgesendet und dann das Bild angezeigt, fertig. Funktioniert so auch einwandfrei (und welche gründe sprechen bitte dafür das mit get zu machen?)

Mir geht es jetzt um die downloadfunktion. Ich könnte ja einfach den pfad als Ziel für den Link setzen, aber das bringt mir gar nichts, da dann das bild erneut angezeigt wird, nur halt in nem anderen fenster. Einzig und allein soll das dazu diesen dass ich auf den link klicke, der downloaddialog erscheint und ich kann die Datei/ die Grafik bequem runterladen. Das will ich damit erreichen.


@einschlauer:
Da gibt es keinen unterschied, wichtig waren die letzten worte, weil du meintest ich bräuchte einen direkten Link, wollte dir nur erklären dass ich einen solchen ja habe, da der pfad zur datei als response zurückgeschickt werden.
 
So etwas in der Art (ohne Downloaddialog) geht auch mit einer .htaccess...
Bsp:
PHP:
<FilesMatch "\.(jpg|gif|png)$" >
ForceType application/octet-stream
</FilesMatch>
 
@einschlauer:
Da gibt es keinen unterschied, wichtig waren die letzten worte, weil du meintest ich bräuchte einen direkten Link, wollte dir nur erklären dass ich einen solchen ja habe, da der pfad zur datei als response zurückgeschickt werden.
Genau aus dem Grund gibt es auch keine Notwendgkeit für einen AJAX Request. AJAX erwartet als response XML oder HTML und genau das willst du nicht
 
Hmm, geht leider immernoch nicht. Wenn ich wie von dir gezeigt die Variable f übergebe, so wird kein File geladen, klar, braucht ja auch den Pfad. Wenn ich dann auf meinen Link klicke dann meint er dass er das angegebene Ziel nicht findet (weil kein Pfad zurückgeht) Wenn ich dann wieder den OPfad zurückgehen lasse dann bin ich wieder so weit wie vorher und die Grafik erscheint im neuen Fenster.
 
Na der Pfad zu meiner datei auf dem Server, $filename. Den gebe ich als Response vom Ajax request zurück.

Es geht, wenn ich nur $f zurückgebe, kein Pfad zur index.htm in Form eines Response zurück. Den brauche ich ja nunmal wenn ich damit das src. attribut des img Tags und das Ziel von meinem Link füttere.

Ich will doch nur das Verhalten ändern was passiert wenn ich auf den Link klicke, also dass das Bild nicht in nem neuen Fenster angezeigt wird sondern dass der Downloadialog erscheint und die Datei gedownloadet werden kann.

Drücke ich mich denn so undeutlich aus?:sad:
 
Drücke ich mich denn so undeutlich aus?:sad:
Nein, aber drücken wir uns so undeutlich aus?

Es geht, wenn ich nur $f zurückgebe, kein Pfad zur index.htm in Form eines Response zurück. Den brauche ich ja nunmal wenn ich damit das src. attribut des img Tags und das Ziel von meinem Link füttere.

Ich will doch nur das Verhalten ändern was passiert wenn ich auf den Link klicke, also dass das Bild nicht in nem neuen Fenster angezeigt wird sondern dass der Downloadialog erscheint und die Datei gedownloadet werden kann.
Das sind zwei verschiedene Dinge.

Dein Skript muss, damit das Bild als download angeboten wird, nicht den Pfad zum Bild, sondern den Inhalt des bildes zurückliefern, dazu braucht das Skript natürlich den genauen Ort wo das Bild liegt, da du das Bild selbst erstellst, sollte das doch nicht so schwer sein.
 
Naja, von einem Bild, das gesetzt wird höre ich jetzt zum ersten mal.

Also wenn dein Bild immer auf dem Server gespeichert wird, angezeigt wird und nur zusätzlich dann ein Download-Link angeboten werden soll musst du deinen Ajax-Request so lassen, wie er war.

Du brauchst dann Zusätzlich noch ein Download-Script wie das meine, nur dass da dann der Dateiname nicht fest in Script steht, sondern über GET mitgeliefert wird (nicht vergessen: Überprüfung, sonst kann jeder deinen gesamten Serverinhalt auslesen).

In den Link schreibst du dann also die Adresse zu deinem Script mit dem entsprechenden GET-Parameter.
 
OK, nur dass ich dich richtig verstanden habe, ich brauche ein weiteres PHP Script, dieses wird durch nen Klick auf den Link angesteuert. Da steht dann dein Beispiel drin, was du mir mal angeboten hast.

Welche Überprüfung meinst du dann? Um zu verhindern dass alle meinen Serverinhalt auslesen können? Was für ne Überprüfung ist das?
 
1. Ja.
2. z.B. eine Dateityp Überprüfung, oder dass im GET nur der Name der Datei steht und du die Endung im Script dahintersetzt. Auf jeden Fall mal eine Ordnerfixierung (Löschen aller / und \ aus dem Dateinamen und scriptseitiges setzen des Bilderordners) usw.
Was die Phantasie so alles hergibt.
 
Zurück
Oben