bokov: Ajax: Files Upload!

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.

  1. 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.

    1. 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?

      1. 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.

        1. Hallo,

          [...] Kannst du überhaupt Perl?

          Kein Dx-Profi aber kann ich. ;-)

          1. Hallo,

            [...] Kannst du überhaupt Perl?

            Kein Dx-Profi aber kann ich. ;-)

            Und ich auch... ;-)

            ps: bokov und egoza sind beide meine Nicknames.

            1. 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

              --
              RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
              1. 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. :)

                1. 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

                  --
                  RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
          2. [...] 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.

            1. 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');  
              
              
              1. 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.

                1. 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.

                  1. 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.

                    1. 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.