Ajax: Files Upload!
bokov
- perl
Hallo alle zusammen,
hat jemand von euch das Valums Upload (http://valums.com/ajax-upload/) ausprobiert. Ich kriege es mit Perl nicht hin.
Original Perl-Script:
#!/usr/bin/perl
use strict;
use CGI::Carp qw(fatalsToBrowser);
use Digest::MD5;
my $uploaddir = '/folder/to/save/in/ajax_upload/tmp_uploads';
my $maxFileSize = 0.5 * 1024 * 1024; # 1/2mb max file size...
use CGI;
my $IN = new CGI;
my $file = $IN->param('POSTDATA');
my $temp_id = $IN->param('temp_id');
# make a random filename, and we guess the file type later on...
my $name = Digest::MD5::md5_base64( rand );
$name =~ s/\+/_/g;
$name =~ s/\//_/g;
my $type;
if ($file =~ /^GIF/) {
$type = "gif";
} elsif ($file =~ /PNG/) {
$type = "png";
} elsif ($file =~ /JFIF/) {
$type = "jpg";
}
if (!$type) {
print qq|{ "success": false, "error": "Invalid file type..." }|;
print STDERR "file has been NOT been uploaded... \n";
}
print STDERR "Making dir: $uploaddir/$temp_id \n";
mkdir("$uploaddir/$temp_id");
open(WRITEIT, ">$uploaddir/$name.$type") or die "Cant write to $uploaddir/$name.$type. Reason: $!";
print WRITEIT $file;
close(WRITEIT);
my $check_size = -s "$uploaddir/$name.$type";
print STDERR qq|Main filesize: $check_size Max Filesize: $maxFileSize \n\n|;
print $IN->header();
if ($check_size < 1) {
print STDERR "ooops, its empty - gonna get rid of it!\n";
print qq|{ "success": false, "error": "File is empty..." }|;
print STDERR "file has been NOT been uploaded... \n";
} elsif ($check_size > $maxFileSize) {
print STDERR "ooops, its too large - gonna get rid of it!\n";
print qq|{ "success": false, "error": "File is too large..." }|;
print STDERR "file has been NOT been uploaded... \n";
} else {
print qq|{ "success": true }|;
print STDERR "file has been successfully uploaded... thank you.\n";
}
Dank für die Tipps.
hat jemand von euch das Valums Upload (http://valums.com/ajax-upload/) ausprobiert. Ich kriege es mit Perl nicht hin.
Was heißt das?
Struppi.
Hallo Struppi,
Was heißt das?
Ich versuche eine Bilddatei auf meinen Server hochzuladen. Die Datei ist eine gültige Bitmap-Datei. D.h. das Bild kann man sehen.
Im Browser steht:
bgb.png 0.2kB Failed
Wenn ich mit Firebug die Client-Server Kommunikation betrachte dann sehe ich:
Parameter:
qqfile bg.gif
Header:
Date Tue, 12 Oct 2010 09:17:34 GMT
Server Apache
Keep-Alive timeout=1, max=100
Connection Keep-Alive
Transfer-Encoding chunked
Content-Type text/html; charset=ISO-8859-1
Anfrage-HeaderQuelltext anzeigen
Host ***.******.***
User-Agent Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.2.10) Gecko/20100914 Firefox/3.6.10
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language ru,de-de;q=0.7,de;q=0.3
Accept-Encoding gzip,deflate
Accept-Charset UTF-8,*
Keep-Alive 115
Connection keep-alive
X-Requested-With XMLHttpRequest
X-File-Name bg.gif
Content-Type application/octet-stream
Referer http://***.******.***/tmp/valums_upload/
Content-Length 17825
Pragma no-cache
Cache-Control no-cache
Post:
GIF89aò... (Also die Bilddaten)
Antwort:
{ "success": true }{ "success": false, "error": "Invalid file type..." }Content-Type: text/html; charset=ISO-8859-1
{ "success": false, "error": "File is empty..." }
HTML:
{ "success": true }{ "success": false, "error": "Invalid file type..." }Content-Type: text/html; charset=ISO-8859-1 { "success": false, "error": "File is empty..." }
Was könnte hier Probleme machen?
HTML:
{ "success": true }{ "success": false, "error": "Invalid file type..." }Content-Type: text/html; charset=ISO-8859-1 { "success": false, "error": "File is empty..." }
Was könnte hier Probleme machen?
Ich kann mit den Analyse Daten wenig anfangen, aber die Meldung klingt so als, ob Bitmap kein gültiger Grafiktyp ist. Was im Perl Code ja auch eindeutig steht. Kannst du überhaupt Perl?
Struppi.
Hallo,
[...] Kannst du überhaupt Perl?
Kein Dx-Profi aber kann ich. ;-)
Hallo,
[...] Kannst du überhaupt Perl?
Kein Dx-Profi aber kann ich. ;-)
Und ich auch... ;-)
ps: bokov und egoza sind beide meine Nicknames.
Hi,
ps: bokov und egoza sind beide meine Nicknames.
Sei bitte so nett, und entscheide dich für einen davon, und nutze künftig nur den.
MfG ChrisB
Hallo ChrisB,
Sei bitte so nett, und entscheide dich für einen davon, und nutze künftig nur den.
Das war nur die Autoausführung von Formularfelder beim Fx 3.6.10. Und anhand von Benutzernamen kann ich leichter meine Beiträge auf Selfhtml finden. Aber ich werde es beachten, dass ich im gleichen Thread nur einen Nickname verwende, versprochen. :)
Hi,
Das war nur die Autoausführung von Formularfelder beim Fx 3.6.10. Und anhand von Benutzernamen kann ich leichter meine Beiträge auf Selfhtml finden. Aber ich werde es beachten, dass ich im gleichen Thread nur einen Nickname verwende, versprochen. :)
Bitte nicht nur im Thread, sondern generell hier im Forum.
Dann wissen wir besser, mit wem wir es zu tun haben, und können auch deinen Kenntnisstand und deine Fortschritte besser einschätzen - und unsere Antworten daran anpassen.
MfG ChrisB
[...] Kannst du überhaupt Perl?
Kein Dx-Profi aber kann ich. ;-)
Naja, dann solltest du auch ohne große Probleme die Stelle erkennen, wo genau das überprüft wird.
Struppi.
Naja, dann solltest du auch ohne große Probleme die Stelle erkennen, wo genau das überprüft wird.
Was überprüft wird? Im Perl-Code wird nur abgefragt welcher Typ von Bilddaten geladen wird und ob die Datei Daten hat. Problem ist aber, dass die Daten an sich den Perl-Code nicht erreichen, d.h. dies hier ist leer:
my $file = $IN->param('POSTDATA');
Naja, dann solltest du auch ohne große Probleme die Stelle erkennen, wo genau das überprüft wird.
Was überprüft wird? Im Perl-Code wird nur abgefragt welcher Typ von Bilddaten geladen wird und ob die Datei Daten hat. Problem ist aber, dass die Daten an sich den Perl-Code nicht erreichen, d.h. dies hier ist leer:
Woher weißt du das? Die Fehlermeldungen, die du uns anfänglich gezeigt hast, sagen etwas anderes.
Struppi.
Woher weißt du das? Die Fehlermeldungen, die du uns anfänglich gezeigt hast, sagen etwas anderes.
Fehler ist beim Perl-Beispiel. Ich habe nachträglich noch den Code für error.log eingeschaltet und die beiden Variablen ausgegeben. Sie sind leer...
Die Ausgabe, die ich vorher gepostet habe ist nur JavaScript-Output und kann alles mögliches als Nachfolgefehler ausspucken.
Die Ausgabe, die ich vorher gepostet habe ist nur JavaScript-Output und kann alles mögliches als Nachfolgefehler ausspucken.
Dann verstehe ich nicht, was dieser Code zu bedeuten hat und in welchem zusammenhang er mit dem Perl Code steht.
Wenn aber keine Werte ankommen, dann läuft was im Browser falsch.
Struppi.
Dann verstehe ich nicht, was dieser Code zu bedeuten hat und in welchem zusammenhang er mit dem Perl Code steht.
Das kann ich dir nicht beantworten, weil im Beispiel außer Perl gibt's noch eine Menge an JavaScript. Wenn du Lust und Zeit hast, dann probiere mal selbst das Beispiel von Valums Ajax Upload; A file upload script with progress-bar, drag-and-drop. Mit PHP läuft es perfekt aber mit Perl hat wohl noch keiner ausprobiert und laut Kommentaren auf der Seite hat der Autor mit dem Perl nichts zu tun, obwohl er es in seinem Beispiel als Beispiel beigefügt hat.
Danke für die Mühe.