| # This example demonstrates you how "file upload": sending |
| # a file to the server thru a html form. |
| |
| # allow file upload |
| # uploadfilesize defines the maximum file size upload |
| # in this case 100 bytes |
| web::config uploadfilesize 100 |
| |
| # utility command to handle an HTML page |
| proc page {title code} { |
| web::putx {<html><head><title>{web::put $title}</title></head> |
| <body bgcolor="#ffffff" text="#000000"> |
| <h3>{web::put $title}</h3> |
| } |
| uplevel $code |
| web::put "</body></html>\n" |
| } |
| |
| # utility command to handle an html form |
| proc form {page code} { |
| web::put "<form enctype=\"multipart/form-data\" method=\"post\" action=\"[web::cmdurl $page]\">" |
| uplevel $code |
| web::put "</form>" |
| } |
| |
| proc showForm {error} { |
| |
| # generate a page with Title "File upload example" |
| page "File upload example" { |
| # generate a form with action "submit" |
| form "submit" { |
| web::putx {{ |
| # if "error" flag is set, show the red error message asking for input |
| if {$error == 1} { |
| web::put "<font color=\"\#990000\">If you'd like to upload a file,\n you have to insert the path and file name <br></font>" |
| } |
| } |
| <b>File:</b> <input type="file" size="30" name="upload" value="{web::put [web::formvar upload]}"> <input type="submit" name="ok" value="Send"> |
| } |
| } |
| } |
| } |
| |
| # validator: |
| # |
| # make sure we have a name that is more than 1. |
| proc checkFormData {} { |
| # string lenght gets the lenght |
| # "lindex [...] 1" is getting the first line from the list in the variable |
| if { [string length [lindex [web::formvar upload] 1]] < 1} { |
| # return error code |
| return 1 |
| } |
| # looks good: no error |
| return 0 |
| } |
| |
| |
| proc showConfirmationPage {} { |
| |
| # gets return value from list upload |
| set localname [lindex [web::formvar upload] 0] |
| set remotename [lindex [web::formvar upload] 1] |
| set NumBytesTruncated [lindex [web::formvar upload] 2] |
| |
| # open pipe for reading uploaded file |
| set fh [open $localname r] |
| set chunk [read $fh 10] |
| close $fh |
| |
| page "File upload example" { |
| |
| web::putx { |
| <b>We have received your file. Thank you.<br><br> |
| Technical information:</b> |
| <br> |
| <table border="0" width="300"> |
| |
| <tr> |
| <td width="100"> |
| File-path:</td><td width="200">{web::put [web::htmlify $localname]}</td></tr> |
| <tr> |
| <td width="100"> |
| Localpath:</td><td width="200">{web::put [web::htmlify $remotename]}</td></tr> |
| <tr> |
| <td width="300" colspan="2"> |
| We have configured websh3 to allow a maximum file size of 100 bytes. Therefore |
| we have truncated the received file by {web::put [web::htmlify $NumBytesTruncated]} bytes. |
| </td></tr> |
| <tr> |
| <td width="100">Start of content:</td><td width="200">{web::put [web::htmlify $chunk]}</td></tr></table> |
| <a href="{web::put [web::cmdurl default]}">upload another file</a> |
| } |
| |
| } |
| } |
| |
| # register the "default" command |
| # |
| # See confirmation form example. |
| web::command default { |
| showForm 0 |
| } |
| |
| # register command "submit" |
| # |
| # This is the "action" of our form. See confirmation form example. |
| |
| web::command submit { |
| |
| if { [set res [checkFormData]] == 0 } { |
| showConfirmationPage |
| } else { |
| showForm $res |
| } |
| } |
| |
| #see dispatch example |
| web::dispatch |