From: Chris M. <Chr...@en...> - 2007-01-31 22:40:47
|
Hi all. Long time webmin tinkerer, short time webamin-devel list troller. I had a question regarding the the improved file upload module and progress bar window. * Improved handling of large file uploads so that they are no longer read into memory by Webmin webserver. Also added a progress bar window for tracking uploads. Firstly, my tests have shown that when attempting a file upload to miniserv, the main miniserv process maynot gobble up memory for the download but the spawned CGI that's being posted to does. I wrote a quick test to see if the fix would be suitable for a module I'm looking at doing. (large file upload) It starts with a simple form: <form method="POST" action="/test/handleUpload.cgi" enctype="multipart/form-data"> <input type="file" name="file" id="file" size="20"> </form> My handleUpload.cgi is pretty straightforward too: &ReadParseMime(); ... my $fh = new IO::File ">$write_file"; if(defined($fh)) { binmode $fh; print $fh $in{'file'}; } $fh->close(); ... This is the approach taken by Tim Neimueller (http://www.niemueller.de/webmin/modules/upload/). I assumed the fix was either transparent to the cgi module using this accepted method, or there's some newer/different usage I need to use. I really hope the fix isn't the applet solution found in the new File module. That's cheating in my book. :-) Though I understand it helped facilitate the progress bar capability. If I can properly arrange for the file upload to not consume tons of memory, I plan to design a progress bar with an IFRAME form post and Ajax. (which I'll share if I ever get it working) Here's my top output for a 1.2gig upload. The 1st process is miniserv, while the 2nd is my handleUpload.cgi. Note the large SIZE and %MEM. 17:20:26 up 6 days, 7:56, 3 users, load average: 2.42, 1.97, 1.29 2 processes: 1 sleeping, 1 running, 0 zombie, 0 stopped CPU states: cpu user nice system irq softirq iowait idle total 0.3% 0.0% 15.4% 34.7% 1.3% 48.0% 0.0% Mem: 382644k av, 378308k used, 4336k free, 0k shrd, 3304k buff 280172k actv, 51884k in_d, 4868k in_c Swap: 10241396k av, 1494184k used, 8747212k free 40336k cached PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME CPU COMMAND 22768 root 15 0 5056 1020 652 D 0.0 0.2 0:00 0 miniserv.pl 25332 root 16 0 1181M 254M 420 R 10.9 68.0 8:32 0 miniserv.pl Any ideas? Thanks! - Chris |