Schrift
[thread]12429[/thread]

ExtJs mit Perl Problem bei den Post Variablen

Leser: 2


<< |< 1 2 3 >| >> 22 Einträge, 3 Seiten
orca16
 2008-09-01 12:43
#114182 #114182
User since
2008-09-01
12 Artikel
BenutzerIn
[default_avatar]
Liebe Gemeinde :),

kleines Problem, was ich hoffe mit eurer Hilfe zu lösen. Gleich vorab, ich bin kein Perl Profi eher ein Anfänger.

Hintergrund: Ein Kunde möchte über seine Webseite seine Bilder vertreiben. Die Bilder sind groß > 50 MB. Er möchte, aus welchen Gründen auch immer, kein FTP Upload machen sondern das komfortabel über eine Eingabemaske.

Da die meisten Anbieter unter php den Upload limitieren bleibt nur Perl übrig.

Realisiert wird das mit dem ExtJs Framework (Javascript) zum Teil php und der Upload der Bilder und das Resize für die Vorschau über Perl.

Wenn ich ein normales HTML Formular nehme meine Postvariablen in hidden Felder anlege und über das File Feld meinen Upload angebe und an das Perl Script absende, funzt alles einwandfrei.

Über den ExtJs Upload Dialog wird die Datei auch hochgeladen und in den angegebenen Ordner gespeichert. Nur ich bekomme keine Postvariablen übermittelt.

Ich habe in Perl ein paar Zeilen zusammengebastelt, die mir die Postvariablen anzeigen sollen. Über das HTML Formular bekomme ich die Variablen nach dem absenden angezeigt über Javascript nicht.

Probiert habe ich schon alle mögliche, Variablen über GET anzeigen lassen oder über STIN aber ich bekomme nix von Javascript übermittelt. Den Upload mal über ein php Script gemacht, da bekomme ich auch die Post Variablen vom Javascript abgeriffen.

Ich suche nun schon seit einer Woche und komme nicht weiter. Vielleicht hat noch jemand einen Ansatz, wie ich an die Postvariablen komme. Ich brauche ja nur 2. Das File und den Ordner.

Gruß Toddy
renee
 2008-09-01 12:45
#114183 #114183
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Zeig mal, *wie* Du das machst (das Zusammenspiel ExtJs und Perl)...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Gast Gast
 2008-09-01 12:54
#114185 #114185
Zeig mal den von PHP generieren HTML-Code mit den versteckten Feldern
orca16
 2008-09-01 12:55
#114187 #114187
User since
2008-09-01
12 Artikel
BenutzerIn
[default_avatar]
über das UploadScript wird ein normales Formular generiert mit einem File Feld und wird an das Perl Script abgeschickt.

Die gesamten Zeilen hier zu posten viel zu viel.
orca16
 2008-09-01 12:59
#114188 #114188
User since
2008-09-01
12 Artikel
BenutzerIn
[default_avatar]
in php generiere ich nicht, ich habe mit den php Script nur testweise mal die Postvariablen vom ExtJs abgefragt.
renee
 2008-09-01 13:20
#114189 #114189
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Zeig doch wenigstens mal, wie Du das in Perl gemacht hast...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
orca16
 2008-09-01 17:34
#114193 #114193
User since
2008-09-01
12 Artikel
BenutzerIn
[default_avatar]
Hat ein wenig gedauert, meine Hunde fordern auch ihr recht auf Toben...

hier mal der Perl Code:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
##############################################################################
# Übergabeparameter aus Script #
##############################################################################
# my $SID = $query->param('sid');
my $action = "upload";
my $DEFAULT_UPLOAD_DIR = 'C:/htdocs/test/images/upload/';

use CGI;
use CGI::Carp qw(fatalsToBrowser);
use strict;
use JSON;

my $query = new CGI;

my @Feldnamen = $query->param();

print $query->header(),
$query->start_html('CGI-Feedback'),
$query->h1('CGI-Feedback vom Formular');
foreach my $Feld (@Feldnamen) {
print $query->strong('Feldname: '),
$Feld,
$query->strong(', Inhalt: '),
$query->param($Feld), "<br>";
}
if($query->param() == 'true') { print "es wurde was uebermittelt<br>\n"; }
print $query->end_html();


if ($query->param('BT_Exit')) { $action = ''; }

if ($action eq 'upload') {
print $query->header;
print &Upload($query, $DEFAULT_UPLOAD_DIR);
} else {
my $url = $BACK_URL . "?error=error1";
print $query->redirect($url);
}

################################################################################
# Subs #
################################################################################

########################################
# Upload Sub #
########################################

sub Upload {
my($query, $upload_dir) = @_;
my($file_query, $file_name, $size, $buff, $time, $bytes_count);
$size = $bytes_count =0;
$_ = $file_query = $query->param('file');
s/\w://;
s/([^\/\\]+)$//;
$_ = $1;
s/\.\.+//g;
s/\s+//g;
$file_name = $_;

if (! $file_name) {
$_ = $NAME_TITLE{'EU_BadFN'};
s/Value_FileName/$file_query/ig;
&Error($_, 1);
}

if (-e "$upload_dir/$file_name") {
$_ = $NAME_TITLE{'EU_FExist'};
s/Value_FileName/$file_name/ig;
&Error($_, 1);
}

open(FILE,">$upload_dir/$file_name") || &Error("Error opening file $file_name for writing, error $!", 1);
binmode FILE;
$time=time();
while ($bytes_count = read($file_query,$buff,2096)) {
$size += $bytes_count;
#select(undef, undef, undef,0.35); # sleep for 0.35 of a second.
print FILE $buff;
}
close(FILE);

chmod (0666, "$upload_dir/$file_name");

if ((stat "$upload_dir/$file_name")[7] <= 0) {
unlink("$upload_dir/$file_name");
$_ = $NAME_TITLE{'EU_Size'};
$_ .= '{"success": false, "error": "Fehler"}';
s/Value_FileName/$file_name/ig;
&Error($_, 1);
} else {
$time = time -$time;
$_ = $NAME_TITLE{'Upload_Succes_txt'};
s/Value_FileName/$file_name/ig;
s/Value_Size/$size/ig;
s/Value_Time/$time/ig;
my $obj = '{"success": "true", "message": "Upload OK"}';
#my $json = JSON->new;
#print $json->encode($obj);
print $obj;
#&ResutPage($NAME_TITLE{'Upload_Succes'}, $_);
}
}

########################################
# Other Subs #
########################################

sub Write_Data_2_File {
my($file, $pt_arry_data) = @_;
open(FILE, ">$file") || print "Cannot write file $file, error: $!<BR>\n";
print FILE @$pt_arry_data;
close(FILE);
}

sub Read_Data_File {
my($file) = @_;
my @data;
open(FILE, "<$file") || print "Cannot open file $file, error: $!<BR>\n";
@data = <FILE>;
close(FILE);
return @data;
}

bei der Übergabe aus dem ExtJS gibt das Perl Script immer zurück 'Bad Filename', aber das Uploadfile wird hochgeladen.

Die Texte zu den Fehlermeldungen habe ich mal rausgelassen.

Gruß Toddy
orca16
 2008-09-05 18:55
#114301 #114301
User since
2008-09-01
12 Artikel
BenutzerIn
[default_avatar]
so nach einigem Suchen habe ich herausgefunden, dass der UploadDialog von ExtJs keine wirklichen Post Variablen übergibt, also habe ich den Upload etwas angepasst, sodas ich nun einige Parameter übergeben bekomme.

Das Perl Script ebenfalls angepasst und das schaut nun so aus:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#!c:/perl/bin/perl -w
my $DATA_DIR='C:/htdocs/test/bigsize_images';                                                           # Path of data directory
my $DEFAULT_UPLOAD_DIR='C:/htdocs/test/images/upload';                                          # Path of work directory
        
################################################################################
#    DO NOT EDIT ANYTHING BELOW THIS LINE UNLESS YOU KNOW WHAT YOU'RE DOING    #
################################################################################
use strict;
use CGI;
use CGI::Carp qw(fatalsToBrowser warningsToBrowser);

my $query = new CGI();

##############################################################################
# Übergabeparameter aus Formular                                             #
##############################################################################
my $SID= $query->url_param('SID');
my $action= $query->url_param('action');
my $file_name=$query->url_param('filename');
my $IMAGE_DIR='C:/htdocs/test/images/'.$query->url_param('album');                                                      # Path of image album directory

if ($query->param('BT_Exit')) { $action = ''; }

if ($action eq 'upload') {
        print $query->header;
        print &Upload($query, $DEFAULT_UPLOAD_DIR, $file_name, $IMAGE_DIR);
} else {
        print "Content-type: text/html\n\n";
        print '({"success":false,"error":"No upload flag request"})';
}

########################################
# Upload Sub                           #
########################################

sub Upload  {
        my($query, $upload_dir) = @_;
    my($file_query,$size, $buff, $time, $bytes_count);
        $size = $bytes_count = 0;
        $file_query = $query->param("file");
                
        if (! $file_name) {
                &Error("Bad filename", 1);
        }

        #if (-e "$upload_dir/$file_name") {
        #       &Error("File allready exists", 1);
        #}

    open(FILE,">$upload_dir/$file_name") || &Error("File not found!", 1);
    binmode FILE;
        $time=time();
    while ($bytes_count = read($file_query,$buff,1024)) {
        print FILE $buff;
        $size += $bytes_count;          
    }
    close(FILE);

        #chmod (0644, "$upload_dir/$file_name");
        
    if ((stat "$upload_dir/$file_name")[7] <= 0) {
                unlink("$upload_dir/$file_name");
        &Error("Could not open file", 1);
    } else {
        $time = time -$time;
                print '({"success":true})';
     }
}

########################################
# HTML Present subs                    #
########################################

sub Error {
        my($errortext, $exit) = @_;
        #print "Content-type: text/html\n\n";
        print '({"success":false,"error":"'.$errortext.'"})';
        if($exit) { exit; }
}


Wenn ich nun die Zeilen
Code (perl): (dl )
1
2
3
#if (-e "$upload_dir/$file_name") {
        #       &Error("File allready exists", 1);
        #}


auskommentiere bekomme ich den Fehler angezeigt, obwohl die Datei eigentlich noch nicht da ist. Was ist da falsch?

Wenn ich die Zeilen auskommentiert lasse, bekomme ich den Fehler angezeigt :Can't use an undefined value as a symbol reference at C:/xampp/cgi-bin/upload.cgi line 53.

Kurioser Weise wird das File aber hochgeladen bzw. geschrieben und ist intakt. Wo liegt da mein Fehler?

Ich bastel nun schon zwei Wochen an dem Ding, so langsam geht mir die Geduld aus...

Hat jemand noch ein paar Tips auf Lager???
Struppi
 2008-09-05 19:01
#114302 #114302
User since
2006-02-17
628 Artikel
BenutzerIn
[Homepage]
user image
Naja, vielleicht solltest du dir noch anzeigen lassen welche Datei da schon existiert:
Code (perl): (dl )
1
2
3
if (-e "$upload_dir/$file_name") {
        Error("File ($upload_dir/$file_name) allready exists", 1);
}
orca16
 2008-09-05 19:22
#114303 #114303
User since
2008-09-01
12 Artikel
BenutzerIn
[default_avatar]
juhu ich habs hinbekommen.

Zeile 66 war schuld. Hab nun wie beim Fehler ein Sub Success gemacht und übergebe nun in Zeile 66 nur den text und ein exit.

Siehe da endlich gehts. Man da ist ja Kinder kriegen noch einfacher :)
<< |< 1 2 3 >| >> 22 Einträge, 3 Seiten



View all threads created 2008-09-01 12:43.