# Target definieren



## computers (25. Dezember 2004)

Zwei Fragen bezüglich "Target":

1)Gibt es eine Möglichkeit das Target eines Hyperlinks anders als durch <a href="#.htm" target="mainframe">Text</a> festzulegen? 

Am besten so, dass ein Standardtarget festgelegt wird. also nur einmal ein Target definiert werden muss und das für alle Links, der Seite gilt.

2) Gibt es einen Parameter, der als Target festlegt, dass die Datei heruntergeladen werden soll? Es handelt sich hier speziell um pdf-Files, die nicht im Browser geöffnet werden sollen, sondern heruntergeladen werden sollen.

Vielen Dank.


----------



## Thomas Lindner (25. Dezember 2004)

1.) Im head : basetarget="WERT"

2.) Nein, weil diese Einstellung ist browse-/clientrabhängig!


----------



## hpvw (25. Dezember 2004)

Zu 2:
Du hast zum Beispiel mit php die Möglichkeit eine Datei "durchzuschleusen" und vorher im header festzulegen, wie der Browser sich verhalten sollte. Dazu musst Du dann aber auch den mime-Type selbst festlegen.
Ob das dann mit allen Brwosern genau so funktioniert, wie Du es haben willst, ist aber nicht garantiert.


----------



## Consti (26. Dezember 2004)

Also zu 2:

Das sowas klappt, weiss ich. Es gibt einige Links, da kann man Bilder (jpgs), die der Browser normal darstellt, speichern kann - mit einem Klick auf einem Link!

Wie man das genauz macht, weiss ich nicht, aber wenn es schon mit jpgs geht, dann sicher auch mit PDFs!
Vllt kann dir Google oder die Forensuche (im Bereich PHP vllt auch), helfen das gewünschte Ergebnis zu bekommen!


----------



## Budman (26. Dezember 2004)

@Consti

Leider nicht, denn es ist schon ein Unterschied, ob Du eine Anwendung starten musst ( AcrobatReader) oder nur ein Bild anschaust.

Das ganze lässt sich wirklich nur über den User festlegen. Bei der Installation des Readers wird man nämlich gefragt, wie man es gerne möchte (im Browserfenster oder als StandAlone).

@computersteffen
Was eine relativ sichere Möglichkeit ist, ist eine zip-Datei. Die wird nicht geöffnet. Andereseits muss Dein Besucher natürlich wissen, wie man mit .zips umgeht....


----------



## computers (26. Dezember 2004)

Danke für Tipps.

zu 2)
Ok, kann man wohl nichts machen. Das mit dem Zippen wird zwar sicherlich funktionieren, allerdings sollte die Seite benutzerfreundlicher dadurch werden, dass die Dateien direkt heruntergeladen werden sollen und wenn der Benutzer die Dateien noch entzippen muss, ist das ja nicht mehr der Fall.

Der Hintergrund warum ich die zweite Frage gestellt habe, das ich mir ein CGI-Uploadscript (EUS 1.0) von http://www.cgi-world.de heruntergeladen habe. Alle hochgeladenen Dateien werden ebenfalls durch das Script verlinkt. Möchte ich nun eine PDF-Datei, die hochgeladen worden ist, öffnen lautet der Pfad nicht zB "/files/file.pdf", sondern z.B. "/eus.cgi?action=showdata&data=54656c65666f6e6c697374652e706466". Das führt irgendwie dazu, dass der IE zwar ein neues Fenster öffnet, aber nicht den Acrobat Reader startet und die Datei auch nicht anzeigt.

Wenn mir da einer weiterhelfen könnte, das wär echt klasse


----------



## hpvw (26. Dezember 2004)

Das CGI-Skript wird vermutlich nicht den richtigen header/mimetype mitsenden.
Wenn Du den einstellen kannst, dann könntest Du auch die Anweisung/Empfehlung geben, dass die Datei gespeichert werden soll:
Der header:

```
content-disposition: attachment; filename=datei.pdf
Content-Type: application/octet-stream
```
Im Idealfall bietet der Browser dann den Speichern-Dialog und schlägt datei.pdf als Namen vor.
Content-disposition ist eigentlich für E-Mails gedacht, ist aber in vielen Browsern auch implementiert.
Ein php-Downloadscript könnte so aussehen:

```
$filename=$_GET['filename'];
header("Content-Disposition:attachment; filename=".$filename."\n");
header("Content-Type: application/octet-stream");
readfile("uploadedFiles/".$filename);
```
Den genauen mime-Type für pdf weiss ich jetzt nicht, aber wenn der User es speichern soll ist der auch nicht so wichtig.


----------



## computers (26. Dezember 2004)

Danke!

Habe Zugriff auf die CGI-Datei und kann diese auch verändern.

Habe den Teil, von dem ich glaube, dass er dazu da ist die Dateien aufzulisten und zu verlinken mal rauskopiert:



```
sub showdata {

	$INFO{'data'} =~ s/([a-fA-F0-9]{2})/pack("C", hex($1))/eg;
	&index("Die Datei existiert nicht!") if(!-e ("$absolutfile/$INFO{'data'}"));

	open(F, "$absolutfile/$INFO{'data'}");
	flock(F,2) if($flock);
	binmode(F);
	if($INFO{'data'} =~ /\.gif$/){
		print "Content-Type: image/gif;\n";
		print "Content-Disposition: inline; filename=$INFO{'file'};\n\n";
	}elsif($INFO{'data'} =~ /\.jpg$/){
		print "Content-Type: image/jpg;\n";
		print "Content-Disposition: inline; filename=$INFO{'file'};\n\n";
	}elsif($INFO{'data'} =~ /\.png$/){
		print "Content-Type: image/png;\n";
		print "Content-Disposition: inline; filename=$INFO{'file'};\n\n";
	}else{
		print "Content-Type: application/octet-stream;\n";
		print "Content-Disposition: filename=$INFO{'data'};\n\n";
	}
	binmode(STDOUT);
	print while (<F>);
	flock(F,8) if($flock);
	close(F);

	exit;

}
```

Wie soll ich da jetzt deine beiden Zeilen einfügen/ergänzen? Wenn dadurch PDF-Files richtig geöffnet werden können, wäre der MIME-Type für mich doch wichtig, weil ich dann das Downloadscript nicht mehr bräuchte.


----------



## hpvw (26. Dezember 2004)

Ohne jetzt die Programmiersprache zu kennen, würde ich es so umschreiben:
Zum Download:

```
sub showdata {

	$INFO{'data'} =~ s/([a-fA-F0-9]{2})/pack("C", hex($1))/eg;
	&index("Die Datei existiert nicht!") if(!-e ("$absolutfile/$INFO{'data'}"));

	open(F, "$absolutfile/$INFO{'data'}");
	flock(F,2) if($flock);
	binmode(F);
	if($INFO{'data'} =~ /\.gif$/){
		print "Content-Type: image/gif;\n";
		print "Content-Disposition: inline; filename=$INFO{'file'};\n\n";
	}elsif($INFO{'data'} =~ /\.jpg$/){
		print "Content-Type: image/jpg;\n";
		print "Content-Disposition: inline; filename=$INFO{'file'};\n\n";
	}elsif($INFO{'data'} =~ /\.png$/){
		print "Content-Type: image/png;\n";
		print "Content-Disposition: inline; filename=$INFO{'file'};\n\n";
	}else{
		print "Content-Disposition: attachment; filename=$INFO{'data'};\n";
		print "Content-Type: application/octet-stream;\n";
	}
	binmode(STDOUT);
	print while (<F>);
	flock(F,8) if($flock);
	close(F);

	exit;

}
```

Zum direkten öffnen:

```
sub showdata {

	$INFO{'data'} =~ s/([a-fA-F0-9]{2})/pack("C", hex($1))/eg;
	&index("Die Datei existiert nicht!") if(!-e ("$absolutfile/$INFO{'data'}"));

	open(F, "$absolutfile/$INFO{'data'}");
	flock(F,2) if($flock);
	binmode(F);
	if($INFO{'data'} =~ /\.gif$/){
		print "Content-Type: image/gif;\n";
		print "Content-Disposition: inline; filename=$INFO{'file'};\n\n";
	}elsif($INFO{'data'} =~ /\.jpg$/){
		print "Content-Type: image/jpg;\n";
		print "Content-Disposition: inline; filename=$INFO{'file'};\n\n";
	}elsif($INFO{'data'} =~ /\.png$/){
		print "Content-Type: image/png;\n";
		print "Content-Disposition: inline; filename=$INFO{'file'};\n\n";
	}else{
		print "Content-Disposition: inline; filename=$INFO{'data'};\n";
		print "Content-Type: application/pdf;\n";
	}
	binmode(STDOUT);
	print while (<F>);
	flock(F,8) if($flock);
	close(F);

	exit;

}
```
Evtl. bei beiden Varianten ohne das Semikolon hinter $INFO{'data'} und evtl auch keins hinter application/....
Und in der Hoffnung, dass in $INFO['data'} wirklich der Dateiname steht.

Gruß hpvw


----------

