Get PostData
From CometWiki
(Difference between revisions)
(Created page with "===XAP Control: Get PostData=== When issued to LUN 0 in an XAP program, the "Get PostData" control gets the post data that was passed from the browser. Syntax: output$ = Contr...") |
(full explanation of ability to retrieve all of post data.) |
||
| Line 1: | Line 1: | ||
===XAP Control: Get PostData=== | ===XAP Control: Get PostData=== | ||
| - | When issued to LUN 0 in an XAP program, the "Get PostData" control gets the post data that was passed from the browser. | + | When issued to LUN 0 in an XAP program, the "Get PostData" control gets the post data that was passed from the browser. PostData may be very large if it contains one or more files selected. |
Syntax: | Syntax: | ||
| Line 9: | Line 9: | ||
String containing the post data from the browser | String containing the post data from the browser | ||
| - | Example | + | Example -- Transferring one or more files from browser to xap: |
| - | + | ||
| + | Html page that sets up the transfer: | ||
| + | |||
| + | <pre> | ||
| + | <form action="http://signature.net:8080/xap/p1" | ||
| + | enctype="multipart/form-data" method="post"> | ||
| + | <p> | ||
| + | Type some text (if you like):<br> | ||
| + | <input type="text" name="textline" size="30"> | ||
| + | </p> | ||
| + | <p> | ||
| + | Please specify a file, or a set of files:<br> | ||
| + | <br><input type="file" name="file1" size="40"> | ||
| + | <br><input type="file" name="file2" size="40"> | ||
| + | <br><input type="file" name="file3" size="40"> | ||
| + | </p> | ||
| + | <div> | ||
| + | <input type="submit" value="Send"> | ||
| + | </div> | ||
| + | </form> | ||
| + | </pre> | ||
| + | |||
| + | Program that receives the result: | ||
| + | |||
| + | <pre> | ||
| + | |||
| + | !//IB// Obj(p1,xap) | ||
| + | |||
| + | length dynamic & local postdata$ separator$ line$ section$ body$ | ||
| + | length 16.0 & local i section seplen | ||
| + | clear | ||
| + | |||
| + | postdata$ = Control( 0, "Get PostData" ) | ||
| + | |||
| + | Print '<p>Program P1 Active' | ||
| + | i = len(postdata$) | ||
| + | print '<p>length of postdata is ';i | ||
| + | seplen = pos('@0d@',postdata$)-1 | ||
| + | print '<p>separator length ';seplen | ||
| + | separator$ = sub(postdata$,1,seplen) | ||
| + | print '<br>separator=';separator$ | ||
| + | postdata$ = sub(postdata$,seplen+2,len(postdata$)) | ||
| + | do | ||
| + | !separate each section | ||
| + | i = pos(separator$,postdata$) | ||
| + | section$ = sub(postdata$,1,i-1) | ||
| + | |||
| + | if i = 0 goto done | ||
| + | section = section + 1 | ||
| + | print '<p>Section ';section | ||
| + | postdata$ = sub(postdata$,i+seplen+1,len(postdata$)) | ||
| + | |||
| + | ! separate each line | ||
| + | do | ||
| + | i = pos('@0d@',section$) | ||
| + | if i = 1 goto body | ||
| + | line$ = sub(section$,1,i) | ||
| + | print '<br>line=';line$ | ||
| + | section$ = sub(section$,i+2,len(section$)) | ||
| + | loop | ||
| + | body: | ||
| + | body$ = sub(section$,3,len(section$)-4) | ||
| + | i = len(body$) | ||
| + | print '<br>body len = ';i | ||
| + | ! put the body in a file | ||
| + | erase 'body.txt', dir='tmp' noexcp | ||
| + | create 'body.txt', dir='tmp' noexcp | ||
| + | close(10) & open(10)'body.txt', dir='tmp' noexcp | ||
| + | printfile(10)body$ | ||
| + | close(10) | ||
| + | |||
| + | loop | ||
| + | |||
| + | !*** Program Termination | ||
| + | ! | ||
| + | done: | ||
| + | close | ||
| + | stop | ||
| + | |||
| + | </pre> | ||
Latest revision as of 18:13, 7 January 2013
XAP Control: Get PostData
When issued to LUN 0 in an XAP program, the "Get PostData" control gets the post data that was passed from the browser. PostData may be very large if it contains one or more files selected.
Syntax:
output$ = Control( 0, "Get PostData" )
Return Value:
String containing the post data from the browser
Example -- Transferring one or more files from browser to xap:
Html page that sets up the transfer:
<form action="http://signature.net:8080/xap/p1" enctype="multipart/form-data" method="post"> <p> Type some text (if you like):<br> <input type="text" name="textline" size="30"> </p> <p> Please specify a file, or a set of files:<br> <br><input type="file" name="file1" size="40"> <br><input type="file" name="file2" size="40"> <br><input type="file" name="file3" size="40"> </p> <div> <input type="submit" value="Send"> </div> </form>
Program that receives the result:
!//IB// Obj(p1,xap)
length dynamic & local postdata$ separator$ line$ section$ body$
length 16.0 & local i section seplen
clear
postdata$ = Control( 0, "Get PostData" )
Print '<p>Program P1 Active'
i = len(postdata$)
print '<p>length of postdata is ';i
seplen = pos('@0d@',postdata$)-1
print '<p>separator length ';seplen
separator$ = sub(postdata$,1,seplen)
print '<br>separator=';separator$
postdata$ = sub(postdata$,seplen+2,len(postdata$))
do
!separate each section
i = pos(separator$,postdata$)
section$ = sub(postdata$,1,i-1)
if i = 0 goto done
section = section + 1
print '<p>Section ';section
postdata$ = sub(postdata$,i+seplen+1,len(postdata$))
! separate each line
do
i = pos('@0d@',section$)
if i = 1 goto body
line$ = sub(section$,1,i)
print '<br>line=';line$
section$ = sub(section$,i+2,len(section$))
loop
body:
body$ = sub(section$,3,len(section$)-4)
i = len(body$)
print '<br>body len = ';i
! put the body in a file
erase 'body.txt', dir='tmp' noexcp
create 'body.txt', dir='tmp' noexcp
close(10) & open(10)'body.txt', dir='tmp' noexcp
printfile(10)body$
close(10)
loop
!*** Program Termination
!
done:
close
stop