Beefy Boxes and Bandwidth Generously Provided by pair Networks
"be consistent"
 
PerlMonks  

comment on

( [id://3333]=superdoc: print w/replies, xml ) Need Help??
Thanks rowdog, that got rid of the error, still not working however... tried it with the session they are logged in with and with a temp session both:
### Filename: file_upload_sys.data ## subs in file: #hook $| = 1; $q = new CGI (\&hook, $sess_ref); # CGI->new(\&hook, $sess_ref); ## T +ried it with both of these, neither worked # Also tried both of these: #$q = new CGI (\&hook, $sess_ref, $use_tempfile); # CGI->new(\&hook, $ +sess_ref, $use_tempfile); # Neither worked $_sloc = '/tmp/s'; # This is the file upload hook, where we can update our session # file with the dirty details of how the upload is going. sub hook { my ($filename,$buffer,$bytes_read,$file) = @_; my ($sessid) = $ENV{QUERY_STRING}; my $length = $ENV{'CONTENT_LENGTH'}; my $percent = 0; if ($length > 0) { # Don't divide by zero. $percent = sprintf("%.1f", (( $bytes_read / $length ) * 100) ); } if($file) { $file->attr("_uploadUpdateStatus_",join(':',$bytes_read,$lengt +h,$percent)); } # Write this data to the session file. open (SES, ">$_sloc/$sessid.session"); print SES "$bytes_read:$length:$percent"; close (SES); } my $action = $q->param("view"); if ($action eq "upl") { # Make a file upload hook. # They are first submitting the file. This code doesn't really + run much # until AFTER the file is completely uploaded. my $sessid = $q->param("sessid") || $ENV{QUERY_STRING}; open (SES,">$_sloc/$sessid.session") or die "Could not locate +file: $! $_sloc/$sessid.session;"; print SES "1:1:1"; close (SES); my $filename = $q->param("incoming"); my $handle = $q->upload("incoming"); $filename =~ s/(?:\\|\/)([^\\\/]+)$/$1/g; # Copy the file to its final location. open (FILE, ">/home$_website_username/www/Videos/$filename") o +r die "Can't create file: $!"; my $buffer; while (read($handle,$buffer,2048)) { print FILE $buffer; } close (FILE); # Delete the session file. unlink("$_sloc/$sessid.session"); # Done. $_tfile = "/home$_website_username/www/Videos/" . $filename; $type = uploadInfo($filename)->{'Content-Type'}; ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$c +time,$blksize,$blocks) = stat($_tfile); if(-e "/home$_website_username/www/Videos/$filename") { $sess_ref->attr("show_message","success|I have successfull +y uploaded $filename to: http://www.domain.com/Videos/$filename<br /> +File type: $type<br />File size: $size bytes<br />$_page_content<br / +>"); window_redirect("$_url?page=$in{page}&do=$in{do}$sess_id") +; } else { $sess_ref->attr("show_message","error|I could not upload t +he file: $filename to: http://www.domain.com/Videos/$filename<br />Fi +le type: $type<br />File size: $size bytes<br />$_page_content"); window_redirect("$_url?page=$in{page}&do=$in{do}$sess_id") +; } } elsif ($action eq "ping") { # Now the meat of the CGI script. print "Content-Type: text/html\n\n"; # Checking up on the status of the upload. my $sessid = $q->param("sessid"); # Exists? if (open(OUTF, "$_sloc/$sessid.session")) { my $data = <OUTF>; close (OUTF); print "$data"; } elsif($sess_ref) { $data = $sess_ref->attr("_uploadUpdateStatus_"); print "$data"; } else { print "Error reading Upload progress...$sessid $! $_sloc/$ +sessid.session"; } if($sess_ref) { $sess_ref->close(); } if($dbh) { $dbh->disconnect(); } exit; } else { my @chars = ( "A" .. "Z", "a" .. "z", 0 .. 9 ); $_newSessId = $_un . join("", @chars[ map { rand @chars } ( 1 +.. 10 ) ]); $_page_content .= qq~ <div id="webform"> <fieldset id="upload_form"> <legend>Approved Upload System</legend><br /> <br /> Hello, you have been verified as allowed to upload + files to the Videos directory for the .com website...<br /> <br /> Please use the system below to upload files to thi +s directory.<br /> <br /> ~ . start_multipart_form(-name=>"uploadFile", -act +ion=>url() . '?' . $_newSessId, -method=>"POST", -onSubmit=>"return s +tartUpload();", id=>"theform") . hidden(-name=>"page") . hidden(-name=>"do") . hidden(-name=>"sessid", -value=>$_newSessId, -over +ride=>1) . hidden(-name=>"view", -value=>"upl", -override=>1) + . $hidden_sess_id . filefield(-name=>'incoming', -class=>'formfield', -size=>50, -maxlength=>80) . qq~<br /> <br /> ~ . submit(-name=>"choice", -value=>"Upload The File", -cl +ass=>"submit") . qq~<br /> <br />~ . end_form() . qq~ </fieldset> <div id="progress-div" style="display: none; width +: 600px; margin: auto"> <fieldset style="width: 600px;"> <legend>Upload Progress</legend><br /> <br /> <div id="trough"> <div id="bar" style="width: 0%"></div> </div> Received <span id="received">0</span>/<span id +="total">0</span> (<span id="percent">0</span>%)<br /> <div id="debug">Uploading</div> </fieldset><br /> <br /> </div> <br /> <br /> </div><br /> <br /> ~ . q~ <script type="text/javascript"> // a jquery-like function, a shortcut to document.getElementBy +Id function $(o) { return document.getElementById(o); } // This function is called when submitting the form. function startUpload() { // Hide the form. document.getElementById('upload_form').style.display = "no +ne"; // Show the progress div. document.getElementById('progress-div').style.display = "b +lock"; // Begin making ajax requests. setTimeout("ping()", 1000); // Allow the form to continue submitting. return true; } // Make an ajax request to check up on the status of the uploa +d function ping() { var ajax = new XMLHttpRequest(); ajax.open("GET", "index.cgi?page=~.$in{page}.q~&do=~.$in{d +o}.q~&view=ping&sessid=~.$_newSessId.q~&" + "rand=" + Math.floor(Math +.random()*99999) + "~.$sess_id.q~", true); ajax.onreadystatechange = function () { if (ajax.readyStat +e == 4) { parse(ajax.responseText);}}; ajax.send(null); } // React to the returned value of our ping test function parse(txt) { var parts = txt.split(":"); document.getElementById("debug").innerHTML = document.getE +lementById("debug").innerHTML + "." + parts[0] + ';' + parts[1] + ';' + + parts[2] + ';'; if (parts.length == 3) { document.getElementById("received").innerHTML = parts[ +0]; document.getElementById("total").innerHTML = parts[1]; document.getElementById("percent").innerHTML = parts[2 +]; document.getElementById("bar").style.width = parts[2] ++ "%"; } // Ping again! setTimeout("ping()", 1000); } </script>~; } 1;
What am I doing wrong? I cannot seem to get it working, even if I have the hook open a debug file and write anything to it, nothing happens. I tried it just using $sessid.session and when that did not work, I created a global file in: /tmp named: s with 777 permissions, still it does not work (we are on a dedicated server behind a firewall so I did not mind doing that, I know it is safe).

Any idea why this does not work?

Thanks,
Rich

In reply to Re^11: file upload and IO::Handle by Anonymous Monk
in thread file upload and IO::Handle by Anonymous Monk

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post; it's "PerlMonks-approved HTML":



  • Are you posting in the right place? Check out Where do I post X? to know for sure.
  • Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
    <code> <a> <b> <big> <blockquote> <br /> <dd> <dl> <dt> <em> <font> <h1> <h2> <h3> <h4> <h5> <h6> <hr /> <i> <li> <nbsp> <ol> <p> <small> <strike> <strong> <sub> <sup> <table> <td> <th> <tr> <tt> <u> <ul>
  • Snippets of code should be wrapped in <code> tags not <pre> tags. In fact, <pre> tags should generally be avoided. If they must be used, extreme care should be taken to ensure that their contents do not have long lines (<70 chars), in order to prevent horizontal scrolling (and possible janitor intervention).
  • Want more info? How to link or How to display code and escape characters are good places to start.
Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others rifling through the Monastery: (2)
As of 2024-04-20 05:54 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found