perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 20
Click for quality!




12.02.2012 / 03:07

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragDownload-Button für TXT-File mit Perl
Seitenanfang
Hallo Kollegen,

mein Szenario sieht wie folgt aus. Ich habe einen ganz simplen Downloadbutton mit <input type> usw. generiert.Wenn man jetzt auf diesen Button klickt, dann soll man eine TXT-Datei downloaden können.Ich wollte das erst mit einem normalen Link (<ahref="">) in HTML machen. Jedoch öffnet es dann die TXT-Datei in manchen Browsern. Darauf habe ich ja leider keinen Einfluss.Kann man dies mit nem kleinen Skript so machen, dass man den Pfad auf der Festplatte angeben muss und dann einen Button zum Speichern drückt.
Könnte man es alternativ auch so machen, dass man beim Anklicken des Button's auf eine weitere HTML-Seite umgeleitet wird, dort in eine Textarea-Box den Pfad auf der eigenen Festplatte eingibt und ein Skript das Ganze dann nach Drücken auf einen Speichern Button abspeichert.
Oder hat jemand eine bessere und elegantere Alternative? Und wie wäre der Befehl in Perl zum speichern auf der Platte ? Geht das Ganze dann mit open usw. und dann in einer skalaren Variable den Pfad einfügen ?

Mit freundlichen Grüßen

Blue Bird

Datum: 13.06.2006-11:05

Beitragre: Download-Button für TXT-File mit Perl
Seitenanfang
Hallo Leute,

also ich hatte mir so ein kleines Perl-Skript gedacht :

#!/usr/bin/perl -w

use CGI::Carp qw(fatalsToBrowser);

$Pfad = $ENV{'QUERY_STRING'};

open(SOURCE,">/home/cgi/temp/ausgabe.txt");
open(DATEIPFAD,">$Pfad");
print SOURCE;
close(DATEIPFAD);
close(SOURCE);

Als Ausgabe kommt jetzt momentan sowas als Ausgabe, wenn man die Datei ausgabe.txt auf C:\ speichern will.

http://........./cgi/save2.pl?pfad=C%3A%5C

Also hat er momentan noch ein Problem mit den Sonderzeichen "\" und ":". Ich müsste mir jetzt eigentlich noch was basteln was mir diese Zeichen richtig ersetzt.Wie mache ich das Am Besten.

Datum: 13.06.2006-13:29

Beitragre: Download-Button für TXT-File mit Perl
Seitenanfang
Hi,
das ist wohl der schnellste weg:
$deinpfad =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

und ciao

Datum: 14.06.2006-11:38

Beitragre: Download-Button für TXT-File mit Perl
Seitenanfang
Hallo reuterc,

also irgendwie funzt das nicht so wirklich. Könntest du mir mal bitte genau erläutern was die Zeile machen soll.Die pack-Funktion wandelt ja irgendwie Perl-Werte in eine Schablone um aber ich verstehe das nicht so ganz.

Tschau

Datum: 14.06.2006-14:26

Beitragre: Download-Button für TXT-File mit Perl
Seitenanfang
Das müsste doch irgendwie so funktionieren, nur leider tut es das nicht.Was mache ich noch falsch ?

#!/usr/bin/perl -w

use CGI::Carp qw(fatalsToBrowser);

$Pfad = $ENV{'QUERY_STRING'};
$Pfad =~ s/%[3A]/":"/gi;
$Pfad =~ s/%[5C]/"\"/gi;

open(SOURCE,">/home/guelke/cgi/temp/ausgabe.txt");
open(DATEIPFAD,">$Pfad");
print SOURCE;
close(DATEIPFAD);
close(SOURCE);

Datum: 14.06.2006-14:51

Beitragre: Download-Button für TXT-File mit Perl
Seitenanfang
Hallo Blue Bird,
die Zeile nimmt einfach deinen string und ersetzt alle %xx kombinationen durch das entsprechende textzeichen ersetzen. In meinem Code funzt das Super.

Datum: 14.06.2006-14:55

Beitragre: Download-Button für TXT-File mit Perl
Seitenanfang
Hallo reuterc,

würde es dir etwas ausmachen wenn du hier mal den kompletten code deines funktionierenden skripts posten würdest, wenn es nicht zu viel ist.

Dankeschön

Datum: 15.06.2006-19:11

Beitragre: Download-Button für TXT-File mit Perl
Seitenanfang
Hi blue bird,
hier die sub:
###
# Umleiten auf neue seite
sub redir {

my $link = shift;

if (!$link) {
read(STDIN, $link, $ENV{'CONTENT_LENGTH'});
$link =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
}

### Weiterleiten
print "Status: 302 Moved\r\nPragma: no-cache\r\nLocation: $link\r\n\r\n";
exit;
}

Datum: 16.06.2006-00:12

Beitragre: Download-Button für TXT-File mit Perl
Seitenanfang
Also der Code sieht jetzt so aus:

#!/usr/bin/perl -w

use CGI::Carp qw(fatalsToBrowser);

read(STDIN, $Pfad, $ENV{'QUERY_STRING'});
$Pfad =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

open(SOURCE,">/home/guelke/cgi/temp/ausgabe.txt");
open(DATEIPFAD,">$Pfad/ausgabe.txt");
print SOURCE;
close(DATEIPFAD);
close(SOURCE);

Die Zeile mit dem read(...); hat auf jeden Fall noch gefehlt. Jetzt macht mir aber noch die zweite Fehlermeldung (closed filehandle) Probleme. Eigentlich müsste die Reihenfolge doch stimmen. Erst die Quelle der Ausgabe öffnen, dann das Ziel wo es hin soll, dann print und dann alles wieder schliessen. Was mache ich da falsch ?

Use of uninitialized value in read at save4.pl line 5.
print() on closed filehandle SOURCE at save4.pl line 11.

Datum: 16.06.2006-13:41

Beitragre: Download-Button für TXT-File mit Perl
Seitenanfang
Hallo blue bird,
wieso 2 Dateien öffnen und dann nen leeres print und die andere bleibt ungenutzt?

hab dir da mal nen bissl debug eingebaut wenn es klappt dann steht in beiden dateien test. Ansonsten kommt ne fehlermeldung.

#!/usr/bin/perl -w

use CGI::Carp qw(fatalsToBrowser);

read(STDIN, $Pfad, $ENV{'QUERY_STRING'});
$Pfad =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

open(SOURCE,">/home/guelke/cgi/temp/ausgabe.txt") || die("Kann die Datei -/home/guelke/cgi/temp/ausgabe.txt- nicht zum schreiben öffnen");
open(DATEIPFAD,">$Pfad/ausgabe.txt") || die("Kann die Datei -$Pfad/ausgabe.txt- nicht zum schreiben öffnen");
print SOURCE "test";
print DATEIPFAD "test";
close(DATEIPFAD);
close(SOURCE);

Datum: 16.06.2006-14:29

Beitragre: Download-Button für TXT-File mit Perl
Seitenanfang
Software error:

Kann die Datei -/ausgabe.txt- nicht zum schreiben öffnen at /home/guelke/cgi/save2.pl line 9.

Kann es irgendwie sein, dass hier noch irgendein Rechteproblem vorliegt. So heissen das hier noch irgendwie Schreibrechte fehlen ?

Datum: 19.06.2006-09:26

Beitragre: Download-Button für TXT-File mit Perl
Seitenanfang
Hiho,
nein fu gibts die falsche Datei an. Der Server versucht die Text datei ins root (/) zu schreiben worauf du natürlich keinen Zugriff hast.
Gib den kompletten Pfad an, also in diesem Fall:
/home/guelke/cgi/ausgabe.txt und dann sollte es funktionieren.

Datum: 19.06.2006-09:42

Beitragre: Download-Button für TXT-File mit Perl
Seitenanfang
Hallo,

ich will die Ausgabe-Datei ja aber nicht auf dem Server speichern sondern auf der Festplatte des Users.
Um den Fehler zu finden, habe ich jetzt alles ganz weit zurückgefahren und will das dann immer weiter aufbauen bis ich dort bin wo ich hin will. Doch da fängt es schon an. Der Code sieht jetzt wie folgt aus:

#!/usr/bin/perl -w

use CGI::Carp qw(fatalsToBrowser);

$url="weiterleiten.pl";
$Daten = $ENV{'QUERY_STRING'};

open(Abfrage1,">/home/guelke/cgi/ausgabe.txt");
print Abfrage1 "$Daten";
close(Abfrage1);

print "location: $url\n\n";

Also ganz simpel das Skript soll nur den Wert aus einem Eingabefeld übernehmen, in einer Datei speichern und dann weiterspringen. Und schon hier spinnt er rum. Er springt zwar weiter,legt aber keine Datei ab. Also liegt das Prolem in der HTML-Datei. Ich fange jetzt nochmal ganz von vorn und teste jeden Schritt einzeln. Ich melde mich auf jeden Fall wieder.

Datum: 19.06.2006-10:35

Beitragre: Download-Button für TXT-File mit Perl
Seitenanfang
Hi Blue Bird,
da gibt es nur ein Problem. Du kannst nicht einfach aus deinem Web script raus auf die Festplatten des Users zugreifen, das ist nicht möglich. Sonst hätten sämtliche cracker etc. ja leichtes Spiel mal schnell während ihre Homepage angezeigt wird, die Festplatte des users abzugrasen und nach z.B. Kennwörtern etc. zu suchen. Du Kannst Dateien nur auf den Ausführendne Rechner schreiben (es sei denn es handelt sich um Cookies oder den Browser Cache).

Datum: 19.06.2006-10:54

Beitragre: Download-Button für TXT-File mit Perl
Seitenanfang
Hallo

das funktioniert also wirklich nicht, dass man in eine Eingabebox den Dateipfad auf der eigenen Festplatte angibt und dann mithilfe des Skripts diese Ausgabe.txt vom Server an den entsprechenden Ort auf der Festplatte des Users abspeichert ?
Sollte dies nicht funktionieren, dann bleibt mir ja nur die Option nen Link zu der Ausgabe.txt auf den Server zu setzen und dann Ziel Speichern Unter als Download angeben oder ?

Datum: 19.06.2006-11:07

Beitragre: Download-Button für TXT-File mit Perl
Seitenanfang
Habe eine Möglichkeit gefunden wo man durch setzen eines headers eine datei zum download anbieten kann ohne das der browser diese anzeigt:

Content-Disposition: attachment; filename=ausgabe.txt

hab es selbst aber noch nicht ausprobiert

Datum: 19.06.2006-12:35

Beitragre: Download-Button für TXT-File mit Perl
Seitenanfang
Hallo

Dankeschön das du dich so ausführlich mit meinem Problemchen beschäftigst. Aber in welcem Zusammenhang steht das mit dem Content-Disposition: attachment; filename=ausgabe.txt. Ich nehme mal an das das HTML ist. Kommst das irgendwie in den Headerteil ? Wäre schön wenn du nen Link hättest wo das steht !

Tschau

Datum: 19.06.2006-13:40

Beitragre: Download-Button für TXT-File mit Perl
Seitenanfang
Hi Blue Bird,
das ist kein html das kommt in den Header, genau wie der Content-Type. Eine genaue Anleitung dazu suche ich auch noch, aber hier is schon mal ein ansatz:
http://bolug.uni-bonn.de/archive/mailinglisten/BoLUG/2001-09/msg00086.html

Datum: 19.06.2006-13:51

Beitragre: Download-Button für TXT-File mit Perl
Seitenanfang
Hab noch etwas rumgesucht, nach Ähnlichen Sachen mit dem Content-Type zum Thema Download :

http://www.perlunity.de/perl/forum/thread_015347.shtml

http://www.onlinewebservice.info/forum/showthread.php?t=15362

Irgendwie muss man damit doch etwas zum Laufen bekommen.

Datum: 19.06.2006-15:31

Beitragre: Download-Button für TXT-File mit Perl
Seitenanfang
#!/usr/bin/perl -w

use CGI::Carp qw(fatalsToBrowser);

$file="ausgabe.txt";

print "Content-type: application/octetstream\n";
print "Content-disposition: inline; filename=\"$file\"\n";
print "Pragma: public\n\n";

print "Hallo Welt\n";

Also ich bin jetzt schon ein Stückchen weiter. Mit diesem Code öffnet das Skript jetzt ein Download-Fenster und bietet die Datei ausgabe.txt zum Download an. Darin steht dann Hallo Welt.Das ist aber noch nicht ganz das was ich mir vorstelle. Denn eigentlich soll das Skript ja eine fertige TXT-Datei zum Download anbieten.Das müsste ja jetzt mit open/print/close irgendwie funktionieren. Ein weiterer Grund war das meine TXT-Dateien in einem Unterverzeichnis von cgi waren.Der Server hat die TXT-Dateien dann als PL-Skripte interpretiert und konnte damit aber nix anfangen. Das Problem habe ich jetzt aber auch mit dem Admin geklärt.

Datum: 20.06.2006-14:11

Beitragre: Download-Button für TXT-File mit Perl
Seitenanfang
Hi Blue Bird,
also die Ausgabe is dann ganz leicht


open(DAT, "</blah/blubb/ausgabe.txt");
while (<DAT>) {
print $_;
}
close(DAT);

oder


use File::Slurp;

$content = read_file("/blah/blubb/ausgabe.txt");
print $content;

Datum: 20.06.2006-14:20

Beitragre: Download-Button für TXT-File mit Perl
Seitenanfang
Also erst nochmal DANKESCHÖN für die erfolgreiche Mitarbeit. Hier nochmal nun der fertige Code der bei mir auf dem Server funktioniert:

#!/usr/bin/perl -w

use CGI::Carp qw(fatalsToBrowser);

$file="ausgabe.txt";

print "Content-type: application/octetstream\n";
print "Content-disposition: inline; filename=\"$file\"\n";
print "Pragma: public\n\n";

open(DATEN,"<../temp/ausgabe.txt");
while (<DATEN>)
{
print $_;
}
close(DATEN);

Der zweite Tipp funktioniert bei mir leider nicht, weil da Software auf dem Server fehlt. Aber so funktioniert es jetzt. Das Einzige was ich gemerkt habe ist, dass der Download-Button nicht mit dem Internet Explorer funktioniert. Da wird das TXT-File gleich im Browser ausgegeben. Naja ist mir aber auch egal da ich es auch noch alternativ als normaler Link anbiete. Also mit Ziel Speichern Unter für alle Mircosoft User. Aber wer benutzt schon den IE ?
Naja ich bastle jetzt noch an einer CSV-Lösung um die Ausgabedatei auch noch einfach weiterbearbeiten zu können.

Tschau

Datum: 20.06.2006-15:43

Beitragre: Download-Button für TXT-File mit Perl
Seitenanfang
Hi blue Bird,
leider muss ich dir da sagen das weit mehr als 80% der user den IE benutzen da er leider für die DAU's dieser Welt der einzige Browser ist weil er gleich im Windoof paket drinnen ist. Werd mich aber mal nach ner möglichkeit umgucken das es auch im IE funzt.

Grüsse

Datum: 20.06.2006-15:49

-






-
-