Der Speichern-Button im wer-weiss-was Fenster

Kann mit jemand sagen, wie dieser „Artikel-Speichern“-Button in diesem Fentser rechts oben funktioniert.

Via CGI wird ein Perl-Script gestartet, was wahrscheinlioch den Ausgabestrom definiert, erzeugt und mit einem speziellen MIME-Type den Response übergibt.

Ich habe das ganze mit einem Servlet probiert, aber bei mir kommt nur der Plain-Text im Browser-Fenster. Ich möchte aber auch den Speichern-Dialog erscheinen lassen.

Wer kann helfen ?

Hi,

Kann mit jemand sagen, wie dieser
„Artikel-Speichern“-Button in diesem
Fentser rechts oben funktioniert.

hast Du doch schon selber :wink:

Via CGI wird ein Perl-Script gestartet,
was wahrscheinlioch den Ausgabestrom
definiert, erzeugt und mit einem
speziellen MIME-Type den Response
übergibt.

Genau. Als MIME-Type mußt Du aber nicht unbedingt das zurückgeben, was die Datei selber ist, sondern etwas, bei dem der Browser mit einem „Speichern“-Dialog reagiert. Speichern tut er ohnehin ohne MIME-Type.

Dafür eignen sich die application/*-Typen, z.B. application/octet-stream. Diesen jedenfalls benutzt wer-weiss-was :wink:

Cheatah
http://cheatah.net

Funktioniert gut, aber bei Euch erscheint standardmäßig *.txt als Dateityp, bei mir erscheint zunächst *.html. Es ist aber
eigentlich Text.

'nen Tip?

Und dann noch was, die lokal abgespeicherte Datei scheint die NewLines „\n“ nicht richtig verarbeitet zu haben.
im Notepad kommen nur
; im Wordpad geht es.
Was muß ich da ändern?

Danke im voraus, Cheatah …

Hi,

Funktioniert gut, aber bei Euch erscheint
standardmäßig *.txt als Dateityp, bei mir
erscheint zunächst *.html. Es ist aber
eigentlich Text.

erweitere den Header der Datei um die Zeile:

Content-Disposition: filename=name.txt

Den Namen kannst Du dann noch passend wählen :wink:

Und dann noch was, die lokal
abgespeicherte Datei scheint die NewLines
„\n“ nicht richtig verarbeitet zu haben.
im Notepad kommen nur
;

(Hast Du da einen HTML-Tag eingegeben?)

im Wordpad geht es.
Was muß ich da ändern?

Hm, das ist wohl mal wieder das Problem mit den unterschiedlichen Zeilenumbrüchen bei den Betriebssystemen. Eine Application wird von Unix aus (selbstverständlich *g*) binär übertragen, so daß die Umbrüche nicht umgewandelt werden; dies müßtest Du dann manuell machen. In etwa so (Quickhack):

foreach (split(/\n/,$dateiinhalt)) {
print $_, „\r\n“;
}

Das sollte dann zumindest auf Windows-Systemen laufen; wenn der Zielrechner Unix (oder Mac, oder Amiga, oder…) ist, wird die Datei vermutlich unschöne Leerzeilen haben.

Cheatah
http://cheatah.net

Funktioniert astrein, auch die Zeilenumbrüche.
Danke Danke Danke, Cheatah! Wir bleiben in Kontakt.

Ciao

Könntest Du das noch mal genauer erläutern?
Im PHP gibt es z.B. einen Befehl, um einen Header zu senden. Ich habe folgendes probiert, was aber nicht funktioniert hat:

#####################
Header(„Content-type: application/octet-stream\n
Content-Disposition: filename=name.txt“);
#####################

Auch mit zwei separaten Header-Befehler in dieser Art ging es nicht :frowning:
Was ist falsch? Wo gibts es darüber mal was zu lesen?

Gruß
Czapie

Hi,

Könntest Du das noch mal genauer
erläutern?
Im PHP gibt es z.B. einen Befehl, um
einen Header zu senden. Ich habe
folgendes probiert, was aber nicht
funktioniert hat:

#####################
Header(„Content-type:
application/octet-stream\n
Content-Disposition: filename=name.txt“);
#####################

Auch mit zwei separaten Header-Befehler
in dieser Art ging es nicht :frowning:

naja, den Befehl gibt es nun mal nicht…

Du solltest wissen, daß der Header das ist, was das Script vor der ersten Leerzeile ausgibt. Du printest also obige Zeilen ganz normal aus, jeweils mit „\n“ beendet, und am Ende folgt noch ein weiteres „\n“ (für die Leerzeile"):

print „Content-type: …\n“;
print „Content-disposition: …\n\n“;

Mehr nicht.

Alternativ dazu kannst Du Dich mit dem Modul CGI.pm beschäftigen. In der bei Perl mitgelieferten Dokumentation (hier: „perldoc CGI“) steht an sich alles drin, was Du dazu brauchst; auch wie man den Header definiert.

Cheatah
http://cheatah.net