# Upload test page with progress statistics # # Vlad Seryakov vlad@crystalballinc.com # # Command to perform set cmd [ns_queryget cmd] # Name of current server set server [ns_info server] # In case of very large files and if server set maxupload limit, this # will return temporary file name where all content is spooled set file [ns_conn contentfile] # No query and not empty file means we need to deal with situation when # all content is in the temp file if { $cmd eq "" && $file ne "" } { ns_log notice uploaded into $file, content type = [ns_set iget [ns_conn headers] content-type] file rename -force -- $file /tmp/test set cmd upload } switch -- $cmd { stats { # Discover absolute path to the script set url [ns_normalizepath [file dirname [ns_conn url]]/upload.tcl] set stats [ns_upload_stats $url] ns_log Notice upload.tcl: $url: $stats # Calculate percentage if { $stats ne "" } { foreach { len size } $stats {} set stats [expr {round($len.0*100/$size.0)}] } else { set stats -1 } ns_return 200 text/html $stats } upload { ns_return 200 text/html "Upload completed" } form { ns_return 200 text/html {
} } default { ns_return 200 text/html [subst {dd if=/dev/zero of=test.dat count=500000
[ns_info config]
) like the following if necessary:
ns_section ns/parameters ns_param progressminsize [expr {1024*1024}] ;# configured value: [ns_config ns/parameters progressminsize]; show progress for files larger than this value ns_section ns/server/$server/adp ns_param enabletclpages true ;# configured value: [ns_config ns/server/$server/adp enabletclpages] ns_section ns/server/$server/module/nssock ns_param maxinput 1000000000 ;# configured value: [ns_config ns/server/$server/module/nssock maxinput]; max accepted size of upload ns_param maxupload 700000000 ;# configured value: [ns_config ns/server/$server/module/nssock maxupload]; spool files larger than this to disk ns_param spoolerthreads 1 ;# configured value: [ns_config ns/server/$server/module/nssock spoolerthreads]; number of spooler threads